-{/* Copy starts */}
-
-
All that you need to start writing to the world!
-
Where your voice will be heard. Scrawlo gives blog space for writers and content creators to write about whatever they want, without being censored.
-
-
Start a Scrawlo
-{/* /profile to / */}
-
-
-
-
-{/* Copy ends */}
-
-
-
-
-
-
- Spacecraft
- A line styled icon from Orion Icon Library.
-
-
-
-
-
-
Launch your space
-
-
-
-
- Social
- A line styled icon from Orion Icon Library.
-
-
-
-
-
-
-
-
-
-
Connect & build your community
-
-
-
-
-
- Luxury
- A line styled icon from Orion Icon Library.
-
-
-
-
-
Learn from PRO creators
-
-
-
-
-
-{/* Convince them */}
-
-
Yes! you own it
-
-
-
-
-
Share scrawls with swags
-Create a scrawl and share with your audience. Scrawls are instant, unique for creative expression. Let the world see your scrawls, including photos, videos, drawings, and more. Make connections with strangers through likes, follows, comments and more.
-
-
-
-
-
Free space for everyone
-
-
-Scrawlo promotes your blog, and gives an additional ecosystem for people to read quickly or click through links. No more lengthy introductions and abstracts just to get to the good stuff. Bloggers can now focus on what they do best and get readers to visit their blogs directly. Users can simply click on the Scrawlo link in the post, which will take them directly to the blog.
-
-
-
-
-
-
Reach your brand goal
-
-Scrawlo is a tool that helps you create content that gets shared. When used strategically, scrawlo can help you reach your brand goals, increase engagement, and grow your audience. It's the only tool you need to create amazing original content. We built it to be easy to use, with features that help all types of businesses produce engaging content quickly and easily.
-
-
-
-
-
-
-
-
-{/* WordCopy Start */}
-
-
-
-
-
-
-
-
- Feather
- A line styled icon from Orion Icon Library.
-
-
-
-Scrawlo
-
-
-
-
-A personal space for you to start blogging, reading and building community.
-Write amazing stuffs anywhere, connect & create memories, be in charge of everything.
-
-
-
-
-{/* Ends Here */}
-{/* Content start */}
-
- Trending
-
-
-
- {
-
- loading?(
-
Loading ...
)
- :
- !posts.length?(
No posts.
)
- :
- (posts.map(post => (
-
-
-
{post.title}
-
Author: Scrawlo Kage
-
- )
- ))
- }
-{/* Checks if its loading above */}
+
+
+
+ Spacecraft
+
+
+
+
+
+
+ Launch
+
+
+
+
+
+ Social
+
+
+
+
+
+
+
+
+
+
+ Connect & Build
+
+
+
+
+
+ Pro
+ A line styled icon from Orion Icon Library.
+
+
+
+
+
+ Be a PRO
+
+
+
+ {/* Convince them */}
+
+
+ Yes! you own it
+
+
+
+
+
+ Share with swags
+
+
+ Create a story and share with your audience.
+
+
+
+
+
+
+ Minimalist Interface
+
+
+
+ Bloggers can now focus on what they do best and get readers to
+ visit their blogs directly.
+
+
+
+
+
+
+ Reach your goal
+
+
+ Cstory help you reach your brand
+ goals, increase engagement, and grow your audience.
+
+
+
+
+
+ {/* WordCopy Start */}
+
+
+
+
+
+
+
+ Cstory
+
+
+
+
+ A personal space for you to start blogging, reading and building
+ community. Write amazing stuffs anywhere, connect & create memories,
+ be in charge of everything.
+
+
+
+
+
+
+
+ Log In/Sign Up
+
+
+ {/* Ends Here */}
+
-
- )
+ );
}
diff --git a/pages/m/edit/[title].js b/pages/m/edit/[title].js
new file mode 100644
index 0000000..348732e
--- /dev/null
+++ b/pages/m/edit/[title].js
@@ -0,0 +1,138 @@
+// pages/new.js
+import { useState, useEffect, useCallback } from "react";
+import { Select, Checkbox, Input } from "@supabase/ui";
+import { v4 as uuid } from "uuid";
+import { useRouter } from "next/router";
+import dynamic from "next/dynamic";
+import "easymde/dist/easymde.min.css";
+import supabase from "../../../utils/initSupabase";
+import { categoryList } from "../../../constants/categories";
+import Loader from "react-loader-spinner";
+import Header from "../../../components/Header";
+
+const SimpleMDE = dynamic(() => import("react-simplemde-editor"), {
+ ssr: false,
+});
+const initialState = { title: "", content: "", category: "" };
+
+function Edit() {
+ const [post, setPost] = useState(initialState);
+
+ const router = useRouter();
+ const [checked, setChecked] = useState(false);
+ const [loading, setLoading] = useState(true);
+ const { title } = router.query;
+
+ const fetchPost = useCallback(() => {
+ const user = supabase.auth.user();
+ Get();
+ async function Get() {
+
+ const { data } = await supabase
+ .from("posts")
+ .select(
+ `category,content,inserted_at,isPrivate,title,user_id,id,creator: user_id(username,fullname)`
+ )
+ .filter("user_id", "eq", user.id)
+ .filter("title", "eq", title.replaceAll("-", " "));
+ // .range(0,currentRange)
+
+ if (!data) {
+ return null;
+ } else {
+ setPost(data[0]);
+ setChecked(data[0].isPrivate);
+ setLoading(false);
+ }
+ }
+ }, [title]);
+
+ useEffect(() => {
+ fetchPost();
+ }, [fetchPost]);
+
+ function onChange(e) {
+ setPost(() => ({ ...post, [e.target.name]: e.target.value }));
+ }
+
+ function handleOnChange() {
+ setChecked(!checked);
+ }
+
+ async function UpdatePost() {
+ if (!title || !post.content) return null;
+ await supabase
+ .from("posts")
+ .update([
+ {
+ title: post.title,
+ content: post.content,
+ category: post.category,
+ isPrivate: checked,
+ },
+ ])
+ .filter("user_id", "eq", supabase.auth.user().id)
+ .filter("id", "eq", post.id);
+ router.push(`/${post.creator.username}/${post.title.replaceAll(" ", "-")}`);
+ }
+
+ while (loading) {
+ return (
+
+ );
+ }
+
+ return (
+
+
+
+ Edit
+
+
+
+
+
+ {categoryList.map((cat) => (
+ {cat}
+ ))}
+
+
+
setPost({ ...post, content: value })}
+ />
+
+
+
+
+
+
+ Update
+
+
+ );
+}
+
+export default Edit;
diff --git a/pages/m/story.js b/pages/m/story.js
new file mode 100644
index 0000000..656064c
--- /dev/null
+++ b/pages/m/story.js
@@ -0,0 +1,121 @@
+// pages/cstory.js
+import { useState, useEffect } from 'react'
+import Link from 'next/link'
+import supabase from "../../utils/initSupabase";
+import { Auth, Input, Button, IconSearch, IconMoreHorizontal} from "@supabase/ui";
+import Loader from "react-loader-spinner";
+import Header from '../../components/Header';
+
+ function MyPosts(props) {
+ const [posts, setPosts] = useState([])
+ const [username, setUserName]=useState();
+ const [loading, setLoading] = useState(true);
+
+ useEffect(() => {
+ fetchPosts()
+ }, [posts])
+
+ async function fetchPosts() {
+ const user = supabase.auth.user()
+ const { data } = await supabase
+ .from('posts')
+ .select(`id,category,content,inserted_at,isPrivate,title,user_id, creator: user_id(username,fullname)`)
+ .filter('user_id', 'eq', user.id)
+ // .range(0,currentRange)
+ if(!data){
+ setLoading(false)
+ return null;
+
+ }
+ else{
+ setPosts(data);
+ setLoading(false)
+ }
+ }
+
+ async function deletePost(id,title) {
+ await supabase
+ .from('posts')
+ .delete()
+ .match({ id,title })
+ fetchPosts()
+ }
+
+ useEffect(()=>{
+ getUserName()
+
+ async function getUserName(){
+ const user = await supabase.auth.user()
+ if (user){
+ const {data} = await supabase
+ .from('profiles')
+ .select('*')
+ .filter('id', 'eq', user.id)
+ setUserName(data[0].username)
+ }
+
+ }
+ }, [username])
+
+ while (loading){
+ return (
)
+ }
+
+ if (username) {
+ return (
+
+ )}
+
+ else {
+ return props.children;
+ }
+
+}
+
+
+export default function AuthProfile() {
+ return (
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/pages/my-posts.js b/pages/my-posts.js
deleted file mode 100644
index 1e7efb8..0000000
--- a/pages/my-posts.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// pages/my-posts.js
-import { useState, useEffect } from 'react'
-import Link from 'next/link'
-import supabase from "../utils/initSupabase";
-
-export default function MyPosts() {
- const [posts, setPosts] = useState([])
- useEffect(() => {
- fetchPosts()
- }, [])
-
- async function fetchPosts() {
- const user = supabase.auth.user()
- const { data } = await supabase
- .from('posts')
- .select('*')
- .filter('user_id', 'eq', user.id)
- setPosts(data)
- }
- async function deletePost(id) {
- await supabase
- .from('posts')
- .delete()
- .match({ id })
- fetchPosts()
- }
- return (
-
-
My Posts
-
- {
- posts.map((post, index) => (
-
-
{post.title}
-
Edit
-
View
-
deletePost(post.id)}
- >Delete
-
- ))
- }
-
-
- )
-}
diff --git a/pages/new.js b/pages/new.js
new file mode 100644
index 0000000..89e81ce
--- /dev/null
+++ b/pages/new.js
@@ -0,0 +1,108 @@
+// pages/new.js
+import { useState , useEffect} from 'react'
+import {Select, Checkbox, Input} from '@supabase/ui'
+import { v4 as uuid } from 'uuid'
+import { useRouter } from 'next/router'
+import dynamic from 'next/dynamic'
+import "easymde/dist/easymde.min.css"
+import supabase from "../utils/initSupabase";
+import {categoryList} from '../constants/categories'
+import Header from '../components/Header'
+
+const SimpleMDE = dynamic(() => import('react-simplemde-editor'), { ssr: false })
+const initialState = { title: '', content: '',category:'technology'}
+
+function New() {
+ const [post, setPost] = useState(initialState)
+ const router = useRouter()
+ const [username, setUserName]=useState('')
+ const [checked, setChecked]=useState(false)
+
+ function onChange(e) {
+ setPost(() => ({...post,[e.target.name]: e.target.value }))
+ }
+
+ function handleOnChange() {
+ setChecked(!checked);
+ }
+
+ useEffect(()=>{
+getUserName()
+
+ async function getUserName(){
+ const user = await supabase.auth.user()
+ const {data} = await supabase
+ .from('profiles')
+ .select('*')
+ .filter('id', 'eq', user.id)
+ if(data[0]===undefined){
+ router.push('/profile')
+ }
+ else{
+ setUserName(data[0].username)
+ }
+ }
+
+ },[username,router])
+
+
+ async function createNewPost() {
+ if (!post.title || !post.content) return null;
+ if (username===null) router.push('/profile');
+ else{
+ const {id} = await supabase.auth.user()
+ await supabase
+ .from('posts')
+ .insert([
+ { title:post.title, content:post.content,category:post.category,isPrivate:checked,user_id:id}
+ ])
+ router.push(`/${username}/${post.title.replaceAll(' ', '-')}`)
+ }
+
+ }
+
+ return (
+
+
+
Create
+
+
+
+
+{categoryList.map((cat)=>{cat} )}
+
+
+
setPost({ ...post, content: value })}
+
+ />
+
+
+
+
+
+ Create Post
+
+ )
+}
+
+export default New;
\ No newline at end of file
diff --git a/pages/notification.js b/pages/notification.js
new file mode 100644
index 0000000..b9b54ac
--- /dev/null
+++ b/pages/notification.js
@@ -0,0 +1,3 @@
+export default function Notification(){
+ return null
+}
\ No newline at end of file
diff --git a/pages/posts/[id].js b/pages/posts/[id].js
deleted file mode 100644
index 8009680..0000000
--- a/pages/posts/[id].js
+++ /dev/null
@@ -1,47 +0,0 @@
-// pages/posts/[id].js
-import { useRouter } from 'next/router'
-import ReactMarkdown from 'react-markdown'
-import supabase from "../../utils/initSupabase";
-
-export default function Post({ post }) {
-
- const router = useRouter()
- if (router.isFallback) {
- return
Loading...
- }
- return (
-
-
{post.title}
-
by {post.user_email}
-
- {// eslint-disable-next-line react/no-children-prop
-
- }
-
- )
-}
-
-export async function getStaticPaths() {
- const { data, error } = await supabase
- .from('posts')
- .select('id')
- const paths = data.map(post => ({ params: { id: JSON.stringify(post.id) }}))
- return {
- paths,
- fallback: true
- }
-}
-
-export async function getStaticProps ({ params }) {
- const { id } = params
- const { data } = await supabase
- .from('posts')
- .select()
- .filter('id', 'eq', id)
- .single()
- return {
- props: {
- post: data
- }
- }
-}
\ No newline at end of file
diff --git a/pages/profile.js b/pages/profile.js
index cfd6cb9..57497bc 100644
--- a/pages/profile.js
+++ b/pages/profile.js
@@ -1,31 +1,585 @@
// pages/profile.js
-import { Auth, Typography, Button } from "@supabase/ui";
-const { Text } = Typography
+import { useState, useEffect, useRef } from "react";
+import { Auth, Button, Modal, IconCamera, Input } from "@supabase/ui";
import supabase from "../utils/initSupabase";
+import dynamic from "next/dynamic";
+import Loader from "react-loader-spinner";
+import { useRouter } from "next/router";
+import Header from "../components/Header";
-function Profile(props){
- const {user} = Auth.useUser();
- if (user)
- return(
- <>
-
-
Signed in: {user.email}
-
props.supabaseClient.auth.signOut()}>
+const DynamicImage = dynamic(() => import("../components/ProfilePicAvatar"), {
+ ssr: false,
+});
+
+function Profile(props) {
+ const initialState = {
+ id: "",
+ avatar_url: null,
+ fullname: "",
+ phone: "",
+ address: "",
+ bio: "",
+ country: "",
+ gender: "",
+ dateofbirth: "",
+ language: "",
+ twitter: "",
+ facebook: "",
+ linkdin: "",
+ website: "",
+ dribble: "",
+ github: "",
+ username: "",
+ };
+
+ const { user } = Auth.useUser();
+ const [profile, setProfile] = useState(initialState);
+ const [visible, setVisible] = useState(false);
+ const inputButton = useRef();
+ const [loading, setLoading] = useState(true);
+ const [currentUserName, setCurrentUserName] = useState("");
+ const [usernameAvailable, setUsernameAvailable] = useState(false);
+ const [isTooltipVisible, setIsTooltipVisible] = useState(false);
+ const router = useRouter();
+
+ function toggle() {
+ setVisible(!visible);
+ }
+
+ function toggleFileUpload() {
+ inputButton.current.click();
+ }
+
+ // async function handleFileUpload(entry){
+ // await supabase.storage.from('avatars').upload(`${user.id}/avatar`,entry, { cacheControl: 3600,
+ // upsert: false})
+ // }
+
+ async function handleImageUploadUpdate(e) {
+ await supabase.storage
+ .from("avatars")
+ .update(`${user.id}/avatar`, e.target.files[0], {
+ cacheControl: 3600,
+ upsert: false,
+ });
+ toggle();
+ }
+
+ const {
+ id,
+ avatar_url,
+ fullname,
+ phone,
+ address,
+ bio,
+ country,
+ gender,
+ dateofbirth,
+ language,
+ twitter,
+ facebook,
+ linkdin,
+ website,
+ dribble,
+ github,
+ username,
+ } = profile ? profile : initialState;
+
+ // profile updates and inputs
+
+ useEffect(() => {
+ getProfile();
+ async function getProfile() {
+ const loggedInUser = await supabase.auth.user();
+ if (loggedInUser) {
+ const { data } = await supabase
+ .from("profiles")
+ .select("*")
+ .filter(
+ "id",
+ "eq",
+ supabase.auth.user() === null ? " " : supabase.auth.user().id
+ );
+
+ if (!data.length) {
+ await supabase.storage
+ .from("avatars")
+ .upload(
+ `${supabase.auth.user().id}/avatar`,
+ "../public/profile.png",
+ { cacheControl: 3600, upsert: false }
+ );
+ let picture = await supabase.storage
+ .from("avatars")
+ .getPublicUrl(`${supabase.auth.user().id}/avatar`);
+ await supabase
+ .from("profiles")
+ .insert([{ id: loggedInUser.id, avatar_url: picture.publicURL }]);
+ setLoading(false);
+ } else {
+ setProfile(data[0]);
+ setCurrentUserName(!data.length ? " " : data[0].username);
+ setLoading(false);
+ }
+ } else {
+ router.push("/auth");
+ }
+ }
+ }, [loading, router]);
+
+ function onChange(e) {
+ setProfile({ ...profile, id: user.id, [e.target.name]: e.target.value });
+ }
+
+ async function setUpdate() {
+ await supabase
+ .from("profiles")
+ .update([
+ {
+ fullname,
+ phone,
+ address,
+ bio,
+ country,
+ gender,
+ dateofbirth,
+ language,
+ twitter,
+ facebook,
+ linkdin,
+ website,
+ dribble,
+ github,
+ },
+ ])
+ .match({ id });
+ }
+
+ async function setInsert() {
+ await supabase.from("profiles").insert([
+ {
+ id: supabase.auth.user().id,
+ fullname,
+ phone,
+ address,
+ bio,
+ country,
+ gender,
+ dateofbirth,
+ language,
+ twitter,
+ facebook,
+ linkdin,
+ website,
+ dribble,
+ github,
+ },
+ ]);
+ }
+
+ async function Submit() {
+ const { data } = await supabase.from("profiles").select("id").match({ id });
+ if (!data.length) {
+ setInsert();
+ } else {
+ setUpdate();
+ }
+
+ toggle();
+ }
+
+ async function InsertUsername() {
+ if (username) {
+ const { data } = await supabase
+ .from("profiles")
+ .select("username")
+ .filter("username", "eq", currentUserName);
+ if (
+ currentUserName.length <= 2 ||
+ currentUserName === "profile" ||
+ currentUserName === "auth" ||
+ currentUserName === "search" ||
+ currentUserName === "home" ||
+ currentUserName === "index" ||
+ currentUserName === "explore" ||
+ currentUserName === "new" ||
+ currentUserName === "_app" ||
+ currentUserName === "notification" ||
+ currentUserName === "setting" ||
+ currentUserName === "draft" ||
+ currentUserName === "null" ||
+ currentUserName === "undefined" ||
+ currentUserName === "true" ||
+ currentUserName === "false" ||
+ currentUserName.includes("/") ||
+ currentUserName.includes("?") ||
+ data.length
+ ) {
+ setUsernameAvailable(false);
+ setIsTooltipVisible(true);
+ } else {
+ setUsernameAvailable(true);
+ await supabase
+ .from("profiles")
+ .update([{ username: currentUserName }])
+ .match({ id });
+ setIsTooltipVisible(true);
+ router.push("/profile");
+ }
+ } else {
+ const { data } = await supabase
+ .from("profiles")
+ .select("username")
+ .filter("username", "eq", currentUserName);
+ if (currentUserName.length <= 2 || data.length) {
+ setUsernameAvailable(false);
+ setIsTooltipVisible(true);
+ } else {
+ setUsernameAvailable(true);
+ await supabase
+ .from("profiles")
+ .update([{ username: currentUserName }])
+ .match({ id });
+ setIsTooltipVisible(true);
+ router.push("/profile");
+ }
+ }
+ }
+
+ while (loading) {
+ return (
+
+ );
+ }
+
+ if (user)
+ return (
+
+
+ {/* profile starts */}
+
+ {/* profile container starts */}
+ {/* Loader Condition Opens */}
+
+
+ {/* container 1 start*/}
+
+
+
+ {/* imagepic */}
+
+
+
+
+
+
+
+ Username
+
+
+
+ setCurrentUserName(e.target.value.trim().toLowerCase())
+ }
+ />
+
+ {
+
{`${usernameAvailable ? "Saved" : "Check"}`}
+ }
+
+
+ {usernameAvailable ? (
+
+ Username Saved
+
+ ) : (
+
+ Username Taken, Minimum of 3 Character
+
+ )}
+
+
+
+
+ Bio
+
+
+
+
+
+ Password
+
+
+
+
+ CHANGE PASSWORD
+
+
+
+
+
+ Email
+
+
+
+
+ Country
+
+
+
+
+ {/* container 1 end */}
+
+ {/* 2 and 3 */}
+
+ {/* container 2 start*/}
+
+
+
+ Gender
+
+
+ --
+ Male
+ Female
+ Prefer not to say
+
+
+
+
+
+ Date of Birth
+
+
+
+
+
+
+
+
+ Twitter
+
+
+
+
+
+
+ Facebook
+
+
+
+
+
+
+ Github
+
+
+
+
+ {/* container 2 ends */}
+
+ {/* container 3 starts */}
+
+
+ {/* container 3 ends */}
+
+
+ {/* 2 and 3 end */}
+
+
+ {/* profile container ends */}
+ {/* button */}
+
+
+ Save
+
+
+
+
+ props.supabaseClient.auth.signOut()}
+ >
Sign out
-
- >
+
+ {/* button end */}
+
+ // profile ends
);
-
+ else {
return props.children;
+ }
}
export default function AuthProfile() {
- return (
-
-
-
-
-
- )
-}
\ No newline at end of file
+ return (
+
+
+
+
+
+ );
+}
diff --git a/pages/search.js b/pages/search.js
new file mode 100644
index 0000000..99fcf2c
--- /dev/null
+++ b/pages/search.js
@@ -0,0 +1,241 @@
+import { useState, useEffect, useRef, useCallback } from "react";
+import {
+ Auth,
+ Input,
+ Button,
+ IconSearch,
+ IconMoreHorizontal,
+} from "@supabase/ui";
+import supabase from "../utils/initSupabase";
+import { useRouter } from "next/router";
+import Loader from "react-loader-spinner";
+import UserCard from "../components/UserCard";
+import ContentCard from "../components/ContentCard";
+import { categoryList } from "../constants/categories";
+import Header from "../components/Header";
+
+export default function Search(props) {
+ const { user } = Auth.useUser();
+ const [loading, setLoading] = useState(true);
+ const loadMore = useRef(null);
+ const router = useRouter();
+ const [posts, setPosts] = useState([]);
+ const [formattedPosts, setFormattedPosts] = useState();
+ const [currentRange, setRange] = useState(10);
+ const [liked, setLike] = useState(false);
+ const [search, setSearch] = useState("");
+
+ const { query } = router;
+
+ const fetchPosts = useCallback(() => {
+ Get();
+ async function Get() {
+ const { data } = await supabase
+ .from("posts")
+ .select(
+ `category,content,inserted_at,isPrivate,title,user_id,id,creator: user_id(username,fullname,avatar_url),featured`
+ )
+ .textSearch("title", `${query.q ? query.q.replace("%20", "") : ""}`, {
+ type: "websearch",
+ })
+ .range(0, currentRange);
+ if (!data) {
+ return null;
+ } else {
+ setPosts(data);
+ }
+ setSearch(query.q ? query.q.replace("%20", "") : "");
+ }
+ }, [currentRange, query]);
+
+ useEffect(() => {
+ fetchPosts();
+ }, [fetchPosts]);
+
+ // posts.forEach((value)=>{b.push({...posts,creator:getCreator(value.id)})})
+
+ useEffect(() => {
+ getProfile();
+ async function getProfile() {
+ const { data } = await supabase
+ .from("profiles")
+ .select("*")
+ .filter(
+ "id",
+ "eq",
+ supabase.auth.user() === null ? " " : supabase.auth.user().id
+ );
+
+ if (!data) {
+ setLoading(false);
+ } else {
+ setLoading(false);
+ }
+ }
+ }, [user, loading]);
+
+ async function LikeCount(id) {
+ const { count } = await supabase
+ .from("likes")
+ .select("post_id", { count: "exact" })
+ .match(id);
+ return count;
+ }
+
+ async function Search() {
+ if (search) {
+ await router.push(`/search?q=${search}`);
+ }
+ }
+
+ while (loading) {
+ return (
+
+ );
+ }
+
+ if (posts) {
+ return (
+
+
+
+
+
+
+
+
+
+
+ See more...
+
+
+
+
+
+
Posts
+
+
{
+ setSearch(e.target.value);
+ }}
+ actions={[
+
+
+ Search
+
,
+ ]}
+ />
+
+
+
+ {/* posts */}
+
+ {!posts.length ? (
+
+ ) : (
+ posts.map((post, index) => (
+
+ ))
+ )}
+
+
+
+
+
+ Join Big Events 🎊
+
+
+ Browse
+
+
+
+
+
+ Be part of events & hackathons, building careers and leveraging
+ your skill by taking internships & browsing job openings from
+ top companies.
+
+
+
+
+ {/* loading more */}
+ {/*
*/}
+
+
+
setRange((value) => value + 10)}
+ className="text-sm flex mx-auto font-medium hover:text-purple-600 text-gray-800 text-center"
+ >
+ Load More ...
+
+
+
+
+
+
+
+
+ Join Big Events 🎊
+
+
+ Browse
+
+
+
+
+
+ Be part of events & hackathons, building careers and leveraging
+ your skill by taking internships & browsing job openings from
+ top companies.
+
+
+
+
+
+ );
+ }
+}
diff --git a/pages/setting.js b/pages/setting.js
new file mode 100644
index 0000000..02b7a54
--- /dev/null
+++ b/pages/setting.js
@@ -0,0 +1,3 @@
+export default function Setting(){
+ return null
+}
\ No newline at end of file
diff --git a/pages/subscribe/early-access.js b/pages/subscribe/early-access.js
index d0c087e..beede19 100644
--- a/pages/subscribe/early-access.js
+++ b/pages/subscribe/early-access.js
@@ -3,8 +3,8 @@ export default function Subscribed (){
return (
-
Thanks for supporting this project and requesting early access on Scrawlo
- I can't wait to show you what we've been working on. You're part of the team now!
+ Thanks for subscribing to our Newsletter
+ I can't wait to share you what we've been working on. You're part of the team!
)
diff --git a/public/scrawler_with_bike.svg b/public/cstory_with_bike.svg
similarity index 100%
rename from public/scrawler_with_bike.svg
rename to public/cstory_with_bike.svg
diff --git a/public/scrawler_with_cup.svg b/public/cstory_with_cup.svg
similarity index 100%
rename from public/scrawler_with_cup.svg
rename to public/cstory_with_cup.svg
diff --git a/public/scrawler_with_pc.svg b/public/cstory_with_pc.svg
similarity index 100%
rename from public/scrawler_with_pc.svg
rename to public/cstory_with_pc.svg
diff --git a/public/profile.png b/public/profile.png
new file mode 100644
index 0000000..46efd79
Binary files /dev/null and b/public/profile.png differ
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 0000000..8a8c114
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,11 @@
+# Allow all user agents.
+User-agent: *
+Allow: /
+Disallow: /m/
+Disallow: /api/
+Disallow: /profile
+Disallow: /500
+Disallow: /400
+Disallow: /subscribe/
+Disallow: /draft
+Disallow: /connection
\ No newline at end of file
diff --git a/public/vercel.svg b/public/vercel.svg
index fbf0e25..814fb63 100644
--- a/public/vercel.svg
+++ b/public/vercel.svg
@@ -1,4 +1,69 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/vercelox.svg b/public/vercelox.svg
new file mode 100644
index 0000000..dbb29b9
--- /dev/null
+++ b/public/vercelox.svg
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/styles/Home.module.css b/styles/Home.module.css
deleted file mode 100644
index 35454bb..0000000
--- a/styles/Home.module.css
+++ /dev/null
@@ -1,121 +0,0 @@
-.container {
- min-height: 100vh;
- padding: 0 0.5rem;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- height: 100vh;
-}
-
-.main {
- padding: 5rem 0;
- flex: 1;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
-}
-
-.footer {
- width: 100%;
- height: 100px;
- border-top: 1px solid #eaeaea;
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-.footer a {
- display: flex;
- justify-content: center;
- align-items: center;
- flex-grow: 1;
-}
-
-.title a {
- color: #0070f3;
- text-decoration: none;
-}
-
-.title a:hover,
-.title a:focus,
-.title a:active {
- text-decoration: underline;
-}
-
-.title {
- margin: 0;
- line-height: 1.15;
- font-size: 4rem;
-}
-
-.title,
-.description {
- text-align: center;
-}
-
-.description {
- line-height: 1.5;
- font-size: 1.5rem;
-}
-
-.code {
- background: #fafafa;
- border-radius: 5px;
- padding: 0.75rem;
- font-size: 1.1rem;
- font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono,
- Bitstream Vera Sans Mono, Courier New, monospace;
-}
-
-.grid {
- display: flex;
- align-items: center;
- justify-content: center;
- flex-wrap: wrap;
- max-width: 800px;
- margin-top: 3rem;
-}
-
-.card {
- margin: 1rem;
- padding: 1.5rem;
- text-align: left;
- color: inherit;
- text-decoration: none;
- border: 1px solid #eaeaea;
- border-radius: 10px;
- transition: color 0.15s ease, border-color 0.15s ease;
- width: 45%;
-}
-
-.card:hover,
-.card:focus,
-.card:active {
- color: #0070f3;
- border-color: #0070f3;
-}
-
-.card h2 {
- margin: 0 0 1rem 0;
- font-size: 1.5rem;
-}
-
-.card p {
- margin: 0;
- font-size: 1.25rem;
- line-height: 1.5;
-}
-
-.logo {
- height: 1em;
- margin-left: 0.5rem;
-}
-
-@media (max-width: 600px) {
- .grid {
- width: 100%;
- flex-direction: column;
- }
-}
diff --git a/tailwind.config.js b/tailwind.config.js
index c0107f2..4b19a20 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -1,5 +1,5 @@
module.exports = {
- purge: [],
+ purge: ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'],
darkMode: false, // or 'media' or 'class'
theme: {
extend: {},
diff --git a/yarn.lock b/yarn.lock
index f10e3e1..53eb600 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2570,6 +2570,11 @@
"resolved" "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz"
"version" "1.1.0"
+"moment@^2.29.1":
+ "integrity" "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
+ "resolved" "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz"
+ "version" "2.29.1"
+
"ms@^2.1.1":
"integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
"resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
@@ -2585,6 +2590,11 @@
"resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
"version" "2.1.2"
+"multiselect-react-dropdown@^2.0.5":
+ "integrity" "sha512-KIkhycdCrzLSMxnI9l2Q77BMx+qF3RYQwegZ5H70g3tcSae6h6JvEnwNm4oQWRiP0EMjlbYFl0aqd6KJEJyo5A=="
+ "resolved" "https://registry.npmjs.org/multiselect-react-dropdown/-/multiselect-react-dropdown-2.0.5.tgz"
+ "version" "2.0.5"
+
"nanoid@^3.1.22", "nanoid@^3.1.23":
"integrity" "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw=="
"resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz"
@@ -3244,7 +3254,7 @@
"iconv-lite" "0.4.24"
"unpipe" "1.0.0"
-"react-dom@^16 || ^17 || ^18", "react-dom@^16.13.1 || ^17.0.1", "react-dom@^17.0.2", "react-dom@>=16.8.2", "react-dom@17.0.2":
+"react-dom@*", "react-dom@^16 || ^17 || ^18", "react-dom@^16.13.1 || ^17.0.1", "react-dom@^17.0.2", "react-dom@>=16.8.2", "react-dom@17.0.2":
"integrity" "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA=="
"resolved" "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz"
"version" "17.0.2"
@@ -3263,6 +3273,13 @@
"resolved" "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz"
"version" "17.0.2"
+"react-loader-spinner@^4.0.0":
+ "integrity" "sha512-RU2vpEej6G4ECei0h3q6bgLU10of9Lw5O+4AwF/mtkrX5oY20Sh/AxoPJ7etbrs/7Q3u4jN5qwCwGLRKCHpk6g=="
+ "resolved" "https://registry.npmjs.org/react-loader-spinner/-/react-loader-spinner-4.0.0.tgz"
+ "version" "4.0.0"
+ dependencies:
+ "prop-types" "^15.7.2"
+
"react-markdown@^6.0.2":
"integrity" "sha512-Et2AjXAsbmPP1nLQQRqmVgcqzfwcz8uQJ8VAdADs8Nk/aaUA0YeU9RDLuCtD+GwajCnm/+Iiu2KPmXzmD/M3vA=="
"resolved" "https://registry.npmjs.org/react-markdown/-/react-markdown-6.0.2.tgz"
@@ -3295,7 +3312,7 @@
"@types/codemirror" "0.0.109"
"@types/marked" "^2.0.2"
-"react@^16 || ^17 || ^18", "react@^16.13.1 || ^17.0.1", "react@^16.8.0 || ^17.0.0", "react@^17.0.2", "react@>=16", "react@>=16.8.2", "react@15.x.x || 16.x.x || 17.x.x", "react@17.0.2":
+"react@*", "react@^16 || ^17 || ^18", "react@^16.13.1 || ^17.0.1", "react@^16.7.0 || ^17.0.0-0", "react@^16.8.0 || ^17.0.0", "react@^17.0.2", "react@>=16", "react@>=16.8.2", "react@15.x.x || 16.x.x || 17.x.x", "react@17.0.2":
"integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA=="
"resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz"
"version" "17.0.2"