├── Nuxt-3-Firebase-Todo-App ├── .gitignore ├── README.md ├── app.vue ├── assets │ └── css │ │ └── main.css ├── components │ ├── Icons │ │ └── TrashIcon.vue │ ├── Loader.vue │ ├── Navbar.vue │ └── TodoAppComponent.vue ├── composables │ ├── useFirebase.ts │ ├── useFirebaseDb.ts │ └── useState.ts ├── layouts │ └── default.vue ├── nuxt.config.ts ├── package-lock.json ├── package.json ├── pages │ ├── Register.vue │ ├── dashboard.vue │ └── index.vue ├── plugins │ ├── auth.ts │ ├── firebaseAuth.client.ts │ └── firebaseDb.client.ts ├── postcss.config.js ├── server │ ├── api │ │ ├── auth.ts │ │ └── me.ts │ └── middleware │ │ └── user-middleware.ts ├── tailwind.config.js ├── tsconfig.json └── yarn.lock ├── Nuxt-FullStack-Todo-App ├── .gitignore ├── README.md ├── Types │ └── todo.interface.ts ├── app.vue ├── assets │ └── main.css ├── components │ ├── Loader.vue │ ├── Navbar.vue │ └── TodoApp.vue ├── composables │ ├── useToast.ts │ └── useTodoStore.ts ├── layouts │ └── default.vue ├── nuxt.config.ts ├── package-lock.json ├── package.json ├── pages │ └── index.vue ├── plugins │ └── toast.client.ts ├── postcss.config.js ├── server │ ├── api │ │ └── todos │ │ │ ├── [id].delete.ts │ │ │ ├── [id].put.ts │ │ │ ├── create.post.ts │ │ │ └── index.ts │ ├── db │ │ └── index.ts │ ├── models │ │ └── Todo.model.ts │ └── validation.ts ├── tailwind.config.js ├── tsconfig.json └── yarn.lock ├── Nuxt3-Blog ├── .gitignore ├── README.md ├── app.vue ├── assets │ └── main.css ├── components │ ├── AppLoadingBar.vue │ ├── Navbar.vue │ ├── Toc.vue │ └── content │ │ ├── Alert.vue │ │ ├── List.vue │ │ └── Wrong.vue ├── content │ └── blog │ │ └── index.md ├── layouts │ └── default.vue ├── nuxt.config.ts ├── package.json ├── pages │ ├── [...slug].vue │ └── index.vue ├── postcss.config.js ├── public │ └── img │ │ └── image.jpg ├── tailwind.config.js ├── tsconfig.json └── yarn.lock ├── Project Images ├── Netflix-Login-Page.png ├── Nuxt3-Blog.png ├── Nuxt3-Firebase-Login-Page.png ├── Nuxt3-Mongodb-Home-Page.png ├── Vue-Coinbase-Coins.png ├── Vue-Coinbase-Hero.png ├── Vue-Instagram-Home-Page.png ├── Vue-Instagram-Login-Page.png ├── Vue-Pinia-Store.png ├── Vue-Whatsapp-Chat-Page.png └── Vue-Whatsapp-Login-Page.png ├── README.md ├── Vue-Coinbase ├── .gitignore ├── .vscode │ └── extensions.json ├── README.md ├── index.html ├── package-lock.json ├── package.json ├── postcss.config.cjs ├── public │ └── vite.svg ├── src │ ├── App.vue │ ├── Types │ │ ├── coins.interface.ts │ │ └── news.interface.ts │ ├── assets │ │ ├── css │ │ │ └── style.css │ │ └── image │ │ │ ├── coinbase.png │ │ │ └── hero-bg.png │ ├── components │ │ ├── CoinCard.vue │ │ ├── Hero.vue │ │ ├── Icon │ │ │ └── Coin.vue │ │ ├── Loader.vue │ │ ├── Navbar-Top.vue │ │ ├── Navbar.vue │ │ ├── NewsCard.vue │ │ └── Tables.vue │ ├── composables │ │ ├── useFormat.ts │ │ └── usePriceChange.ts │ ├── main.ts │ ├── router │ │ └── index.ts │ ├── utils │ │ ├── coinApi.ts │ │ └── newsApi.ts │ ├── views │ │ ├── CoinView.vue │ │ ├── Home.vue │ │ └── NewsView.vue │ └── vite-env.d.ts ├── tailwind.config.cjs ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts ├── Vue-Instagram-Clone ├── .gitignore ├── .vscode │ └── extensions.json ├── README.md ├── index.html ├── package-lock.json ├── package.json ├── postcss.config.cjs ├── public │ └── vite.svg ├── src │ ├── App.vue │ ├── components │ │ ├── ColorModeSwitch.vue │ │ ├── CommentsComponent.vue │ │ ├── FeedComponent.vue │ │ ├── FeedInput.vue │ │ ├── FeedStories.vue │ │ ├── FeedStory.vue │ │ ├── LoginForm.vue │ │ ├── Navbar.vue │ │ ├── NavbarIcons.vue │ │ ├── PostComponent.vue │ │ ├── ProfileComponent.vue │ │ ├── ProfileImageComponent.vue │ │ ├── RegisterForm.vue │ │ ├── SuggestionComponent.vue │ │ ├── SuggestionProfileImageComponent.vue │ │ └── SuggestionsComponent.vue │ ├── firebaseConfig.js │ ├── main.js │ ├── router │ │ └── index.js │ ├── stores │ │ └── authStore.js │ ├── style.css │ └── views │ │ ├── Feed.vue │ │ ├── Login.vue │ │ ├── Profile.vue │ │ └── Register.vue ├── tailwind.config.cjs ├── vite.config.js └── yarn.lock ├── Vue-Netflix-Clone ├── .gitignore ├── .vscode │ └── extensions.json ├── README.md ├── index.html ├── package-lock.json ├── package.json ├── postcss.config.js ├── public │ └── favicon.ico ├── src │ ├── App.vue │ ├── assets │ │ ├── css │ │ │ └── index.css │ │ └── images │ │ │ ├── Netflix-BG.jpg │ │ │ ├── Netflix-Header.png │ │ │ ├── Netflix-Icon.png │ │ │ └── Netflix-avatar.png │ ├── axios │ │ └── axios.js │ ├── components │ │ ├── Banner.vue │ │ ├── Header.vue │ │ ├── Loader.vue │ │ ├── Navbar.vue │ │ ├── Row.vue │ │ └── __tests__ │ │ │ ├── Header.spec.js │ │ │ ├── authStore.spec.js │ │ │ └── movieStore.spec.js │ ├── main.js │ ├── requests │ │ └── requests.js │ ├── router │ │ └── index.js │ ├── stores │ │ ├── authStore.js │ │ └── movieStore.js │ ├── supabaseConfig.js │ └── views │ │ ├── Home.vue │ │ ├── List.vue │ │ ├── Login.vue │ │ ├── Movie.vue │ │ └── Register.vue ├── tailwind.config.js ├── vite.config.js ├── vitest.config.js └── yarn.lock ├── Vue-Pinia-Store ├── .gitignore ├── .vscode │ └── extensions.json ├── README.md ├── index.html ├── package-lock.json ├── package.json ├── postcss.config.js ├── public │ └── favicon.ico ├── src │ ├── App.vue │ ├── assets │ │ ├── css │ │ │ └── index.css │ │ └── svg │ │ │ └── Pinia.svg │ ├── components │ │ ├── Loader.vue │ │ ├── Navbar.vue │ │ ├── Product_Cards.vue │ │ └── Product_Loader.vue │ ├── main.js │ ├── router │ │ └── index.js │ ├── stores │ │ └── productStore.js │ └── views │ │ ├── Cart.vue │ │ ├── Home.vue │ │ └── Product.vue ├── tailwind.config.js ├── vite.config.js └── yarn.lock └── Vue-Whatsapp-Clone ├── .gitignore ├── .vscode └── extensions.json ├── README.md ├── index.html ├── package-lock.json ├── package.json ├── postcss.config.cjs ├── public └── vite.svg ├── src ├── App.vue ├── assets │ ├── Placeholder.png │ ├── robot.gif │ └── whatsapp-logo.png ├── components │ ├── ChatHeader.vue │ ├── Loader.vue │ ├── MessageContainer.vue │ ├── MessageInput.vue │ ├── Navbar.vue │ └── Sidebar.vue ├── firebaseConfig.js ├── main.js ├── router │ └── index.js ├── store │ └── authStore.js ├── style.css └── views │ ├── Chat.vue │ ├── Login.vue │ ├── Profile.vue │ └── Register.vue ├── tailwind.config.cjs ├── vite.config.js └── yarn.lock /Nuxt-3-Firebase-Todo-App/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log* 3 | .nuxt 4 | .nitro 5 | .cache 6 | .output 7 | .env 8 | dist 9 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/README.md: -------------------------------------------------------------------------------- 1 | # Nuxt 3 Minimal Starter 2 | 3 | Look at the [nuxt 3 documentation](https://v3.nuxtjs.org) to learn more. 4 | 5 | ## Setup 6 | 7 | Make sure to install the dependencies: 8 | 9 | ```bash 10 | # yarn 11 | yarn install 12 | 13 | # npm 14 | npm install 15 | 16 | # pnpm 17 | pnpm install --shamefully-hoist 18 | ``` 19 | 20 | ## Development Server 21 | 22 | Start the development server on http://localhost:3000 23 | 24 | ```bash 25 | npm run dev 26 | ``` 27 | 28 | ## Production 29 | 30 | Build the application for production: 31 | 32 | ```bash 33 | npm run build 34 | ``` 35 | 36 | Locally preview production build: 37 | 38 | ```bash 39 | npm run preview 40 | ``` 41 | 42 | Checkout the [deployment documentation](https://v3.nuxtjs.org/guide/deploy/presets) for more information. 43 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/app.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/assets/css/main.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap'); 2 | @tailwind base; 3 | @tailwind components; 4 | @tailwind utilities; 5 | 6 | @layer base { 7 | body { 8 | @apply bg-[#151515] font-Roboto text-white 9 | } 10 | } 11 | 12 | @layer components { 13 | .grid-layout { 14 | @apply grid place-items-center 15 | } 16 | 17 | .flex-between { 18 | @apply flex justify-between items-center 19 | } 20 | 21 | .flex-layout { 22 | @apply flex justify-between items-center px-4 23 | } 24 | 25 | .flex-center { 26 | @apply flex items-center 27 | } 28 | 29 | .label { 30 | @apply text-white block 31 | } 32 | 33 | .input-style { 34 | @apply appearance-none py-2 px-2 mt-2 w-full rounded-md focus:outline-none focus:ring-1 focus:ring-green-500 bg-gray-400/30 text-white placeholder-gray-400 35 | } 36 | 37 | .error { 38 | @apply font-bold text-red-500 py-2 39 | } 40 | } -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/components/Icons/TrashIcon.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/components/Loader.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 9 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/components/Navbar.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | Nuxt 3 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 21 | 22 | 23 | Sign Out 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/components/TodoAppComponent.vue: -------------------------------------------------------------------------------- 1 | 41 | 42 | 43 | 44 | 45 | Todo List 46 | 47 | 48 | 49 | 51 | Add 53 | 54 | 55 | You have no todos 56 | 57 | 58 | 59 | 61 | 62 | 64 | {{ task.todo 65 | }} 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/composables/useFirebase.ts: -------------------------------------------------------------------------------- 1 | import { useLoadingState, useFirebaseUser } from './useState'; 2 | import { doc, setDoc, getFirestore } from "firebase/firestore"; 3 | import { getAuth, createUserWithEmailAndPassword, signInWithEmailAndPassword, onAuthStateChanged, signOut } from "firebase/auth"; 4 | export const registerUser = async (email: string, password: string) => { 5 | const auth = getAuth(); 6 | const db = getFirestore(); 7 | const response = await createUserWithEmailAndPassword(auth, email, password); 8 | await setDoc(doc(db, "users", response.user.uid), { 9 | id: response.user.uid, 10 | email: response.user.email 11 | }); 12 | return response; 13 | } 14 | 15 | export const loginUser = async (email: string, password: string) => { 16 | const auth = getAuth(); 17 | const response = await signInWithEmailAndPassword(auth, email, password) 18 | return response; 19 | } 20 | 21 | export const initUser = async () => { 22 | const firebaseUser = useFirebaseUser(); 23 | const loadingState = useLoadingState(); 24 | const auth = getAuth(); 25 | firebaseUser.value = auth.currentUser; 26 | const router = useRouter(); 27 | const userCookie: any = useCookie("userCookie"); 28 | onAuthStateChanged(auth, (user) => { 29 | if (user) { 30 | router.push("/dashboard") 31 | } else { 32 | router.push("/") 33 | }; 34 | loadingState.value = false; 35 | firebaseUser.value = user; 36 | userCookie.value = user; 37 | 38 | $fetch("/api/auth", { 39 | method: "POST", 40 | body: { user }, 41 | }); 42 | }); 43 | }; 44 | 45 | export const signOutUser = async () => { 46 | const auth = getAuth(); 47 | await signOut(auth); 48 | } 49 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/composables/useFirebaseDb.ts: -------------------------------------------------------------------------------- 1 | import { 2 | collection, addDoc, getFirestore, Timestamp 3 | } from "firebase/firestore"; 4 | import { getAuth } from "@firebase/auth"; 5 | export const addTodo = async (todo: string, completed: boolean) => { 6 | const auth = getAuth(); 7 | const db = getFirestore() 8 | const docRef = collection(db, "todos"); 9 | await addDoc(docRef, { 10 | id: auth?.currentUser?.uid, 11 | todo, 12 | completed, 13 | createdAt: Timestamp.fromDate(new Date()) 14 | }); 15 | }; -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/composables/useState.ts: -------------------------------------------------------------------------------- 1 | export const useFirebaseUser = () => useState("firebaseUser", () => { }); 2 | export const useLoadingState = () => useState("loadingState", () => true); 3 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/layouts/default.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/nuxt.config.ts: -------------------------------------------------------------------------------- 1 | // https://v3.nuxtjs.org/api/configuration/nuxt.config 2 | export default defineNuxtConfig({ 3 | modules: [ 4 | "@nuxtjs/tailwindcss" 5 | ], 6 | runtimeConfig: { 7 | FIREBASE_API_KEY: "AIzaSyA2EoYFdCCTCQ7FXyF9VX-DjdFpQ8h5GzU", 8 | FIREBASE_AUTH_DOMAIN: "nuxt-firebase-b75fb.firebaseapp.com", 9 | FIREBASE_PROJECT_ID: "nuxt-firebase-b75fb", 10 | FIREBASE_STORAGE_BUCKET: "nuxt-firebase-b75fb.appspot.com", 11 | FIREBASE_MESSAGING_SENDER_ID: "218542199251", 12 | FIREBASE_APP_ID: "1:218542199251:web:377bedd62925789a5b9f26", 13 | public: { 14 | FIREBASE_API_KEY: "AIzaSyA2EoYFdCCTCQ7FXyF9VX-DjdFpQ8h5GzU", 15 | FIREBASE_AUTH_DOMAIN: "nuxt-firebase-b75fb.firebaseapp.com", 16 | FIREBASE_PROJECT_ID: "nuxt-firebase-b75fb", 17 | FIREBASE_STORAGE_BUCKET: "nuxt-firebase-b75fb.appspot.com", 18 | FIREBASE_MESSAGING_SENDER_ID: "218542199251", 19 | FIREBASE_APP_ID: "1:218542199251:web:377bedd62925789a5b9f26", 20 | } 21 | }, 22 | 23 | css: [ 24 | "@/assets/css/main.css" 25 | ] 26 | }) 27 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "build": "nuxt build", 5 | "dev": "nuxt dev", 6 | "generate": "nuxt generate", 7 | "preview": "nuxt preview", 8 | "postinstall": "nuxt prepare" 9 | }, 10 | "devDependencies": { 11 | "nuxt": "3.0.0-rc.11" 12 | }, 13 | "dependencies": { 14 | "@nuxtjs/tailwindcss": "^5.3.3", 15 | "@vuelidate/core": "^2.0.0", 16 | "@vuelidate/validators": "^2.0.0", 17 | "firebase": "^9.10.0" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/pages/Register.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 31 | 33 | 34 | 35 | 36 | 37 | 38 | Username 39 | 40 | {{v$.username.$errors[0].$message}} 41 | 42 | 43 | Email 44 | 45 | {{v$.email.$errors[0].$message}} 46 | 47 | 48 | Password 49 | 50 | {{v$.password.$errors[0].$message}} 51 | 52 | 53 | 54 | ConfirmPassword 55 | 57 | {{v$.confirmPassword.$errors[0].$message}} 58 | 59 | 60 | 61 | 63 | {{ loading ? "Signing Up..." : "Sign Up"}} 64 | 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/pages/dashboard.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/pages/index.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | Email 35 | 36 | {{v$.email.$errors[0].$message}} 37 | 38 | 39 | Password 40 | 41 | {{v$.password.$errors[0].$message}} 42 | 43 | 44 | 45 | Don't have an account yet? 47 | Register 48 | 49 | 50 | 51 | 52 | 54 | {{ loading ? "Signing In..." : "Sign In"}} 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/plugins/auth.ts: -------------------------------------------------------------------------------- 1 | export default defineNuxtPlugin(() => { 2 | addRouteMiddleware('auth', () => { 3 | const { $auth } = useNuxtApp() 4 | if (!$auth?.currentUser?.uid) { 5 | return navigateTo("/") 6 | } 7 | }) 8 | }) -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/plugins/firebaseAuth.client.ts: -------------------------------------------------------------------------------- 1 | import { initializeApp } from "firebase/app"; 2 | import { getAuth } from "@firebase/auth"; 3 | export default defineNuxtPlugin((nuxtApp) => { 4 | const config = useRuntimeConfig() 5 | const firebaseConfig = { 6 | apiKey: config.public.FIREBASE_API_KEY, 7 | authDomain: config.public.FIREBASE_AUTH_DOMAIN, 8 | projectId: config.public.FIREBASE_PROJECT_ID, 9 | storageBucket: config.public.FIREBASE_STORAGE_BUCKET, 10 | messagingSenderId: config.public.FIREBASE_MESSAGING_SENDER_ID, 11 | appId: config.public.FIREBASE_APP_ID 12 | }; 13 | const app = initializeApp(firebaseConfig); 14 | initUser(); 15 | const auth = getAuth(app); 16 | nuxtApp.vueApp.provide('auth', auth); 17 | nuxtApp.provide('auth', auth); 18 | }) 19 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/plugins/firebaseDb.client.ts: -------------------------------------------------------------------------------- 1 | import { initializeApp } from "firebase/app"; 2 | import { getFirestore } from "@firebase/firestore"; 3 | export default defineNuxtPlugin((nuxtApp) => { 4 | const config = useRuntimeConfig() 5 | const firebaseConfig = { 6 | apiKey: config.public.FIREBASE_API_KEY, 7 | authDomain: config.public.FIREBASE_AUTH_DOMAIN, 8 | projectId: config.public.FIREBASE_PROJECT_ID, 9 | storageBucket: config.public.FIREBASE_STORAGE_BUCKET, 10 | messagingSenderId: config.public.FIREBASE_MESSAGING_SENDER_ID, 11 | appId: config.public.FIREBASE_APP_ID 12 | }; 13 | const app = initializeApp(firebaseConfig); 14 | const db = getFirestore(app); 15 | nuxtApp.vueApp.provide('db', db); 16 | nuxtApp.provide('db', db); 17 | }) 18 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/server/api/auth.ts: -------------------------------------------------------------------------------- 1 | import type { IncomingMessage, ServerResponse } from "http"; 2 | export default async (req: IncomingMessage, res: ServerResponse) => { 3 | // @ts-ignore 4 | if (req.method !== "POST") return "Must be a post request"; 5 | 6 | // @ts-ignore 7 | const { user } = await useBody(req); 8 | 9 | // @ts-ignore 10 | req.user = user; 11 | return { updated : true } 12 | } -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/server/api/me.ts: -------------------------------------------------------------------------------- 1 | import type { IncomingMessage, ServerResponse } from "http"; 2 | export default async (req: IncomingMessage, res: ServerResponse) => { 3 | // @ts-ignore 4 | const user = req.user; 5 | return user ? user : "User is signed out"; 6 | } -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/server/middleware/user-middleware.ts: -------------------------------------------------------------------------------- 1 | import type { IncomingMessage, ServerResponse } from "http"; 2 | export default async (req: IncomingMessage, res: ServerResponse) => { 3 | // @ts-ignore 4 | const userCookie = useCookie(req, "userCookie"); 5 | // @ts-ignore 6 | req.user = userCookie; 7 | } -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [], 4 | theme: { 5 | extend: { 6 | fontFamily: { 7 | "Roboto": "Roboto" 8 | } 9 | }, 10 | }, 11 | plugins: [], 12 | } 13 | -------------------------------------------------------------------------------- /Nuxt-3-Firebase-Todo-App/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // https://v3.nuxtjs.org/concepts/typescript 3 | "extends": "./.nuxt/tsconfig.json" 4 | } 5 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log* 3 | .nuxt 4 | .nitro 5 | .cache 6 | .output 7 | .env 8 | dist 9 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/README.md: -------------------------------------------------------------------------------- 1 | # Nuxt 3 Minimal Starter 2 | 3 | Look at the [nuxt 3 documentation](https://v3.nuxtjs.org) to learn more. 4 | 5 | ## Setup 6 | 7 | Make sure to install the dependencies: 8 | 9 | ```bash 10 | # yarn 11 | yarn install 12 | 13 | # npm 14 | npm install 15 | 16 | # pnpm 17 | pnpm install --shamefully-hoist 18 | ``` 19 | 20 | ## Development Server 21 | 22 | Start the development server on http://localhost:3000 23 | 24 | ```bash 25 | npm run dev 26 | ``` 27 | 28 | ## Production 29 | 30 | Build the application for production: 31 | 32 | ```bash 33 | npm run build 34 | ``` 35 | 36 | Locally preview production build: 37 | 38 | ```bash 39 | npm run preview 40 | ``` 41 | 42 | Checkout the [deployment documentation](https://v3.nuxtjs.org/guide/deploy/presets) for more information. 43 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/Types/todo.interface.ts: -------------------------------------------------------------------------------- 1 | export interface TodoInterface { 2 | id: string, 3 | todo: string 4 | } -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/app.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/assets/main.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap'); 2 | @tailwind base; 3 | @tailwind components; 4 | @tailwind utilities; 5 | 6 | @layer base { 7 | body { 8 | @apply bg-[#151515] font-Roboto text-white 9 | } 10 | } 11 | 12 | @layer components { 13 | .grid-layout { 14 | @apply grid place-items-center 15 | } 16 | 17 | .flex-between { 18 | @apply flex justify-between items-center 19 | } 20 | 21 | .flex-layout { 22 | @apply flex justify-between items-center px-4 23 | } 24 | 25 | .flex-center { 26 | @apply flex items-center 27 | } 28 | 29 | .label { 30 | @apply text-white block 31 | } 32 | 33 | .input-style { 34 | @apply appearance-none py-2 px-2 mt-2 w-full rounded-md focus: outline-none focus:ring-1 focus:ring-green-500 bg-gray-400/30 text-white placeholder-gray-400 35 | } 36 | 37 | .error { 38 | @apply font-bold text-red-500 py-2 39 | } 40 | } -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/components/Loader.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 10 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/components/Navbar.vue: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | Nuxt 3 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/components/TodoApp.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 32 | 33 | Todo List 34 | 35 | 36 | 37 | 39 | 41 | 42 | 43 | 44 | 45 | 46 | Add 47 | 48 | 49 | 50 | 51 | 52 | You have no todos 53 | 54 | 55 | 56 | 58 | 59 | 61 | {{ 62 | task }} 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/composables/useToast.ts: -------------------------------------------------------------------------------- 1 | import { useToast as toasty } from "vue-toastification"; 2 | export default function () { 3 | const toast = toasty(); 4 | return toast; 5 | }; 6 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/composables/useTodoStore.ts: -------------------------------------------------------------------------------- 1 | import { defineStore } from "pinia"; 2 | import { TodoInterface } from "~~/Types/todo.interface"; 3 | import useToast from "./useToast"; 4 | export const useTodoStore = defineStore({ 5 | id: "todoStore", 6 | state: () => ({ 7 | todos: [] as TodoInterface[], 8 | stateLoading: false, 9 | todosLoading: false, 10 | }), 11 | 12 | actions: { 13 | // get all the todos from the db 14 | async getAllTodos() { 15 | try { 16 | this.todosLoading = true; 17 | const data = await $fetch("/api/todos"); 18 | this.todos = data; 19 | this.todosLoading = false; 20 | return data as TodoInterface[] 21 | } catch (err) { 22 | useToast().error(err.message) 23 | } 24 | }, 25 | 26 | async createTodo(task: string, complete: boolean) { 27 | try { 28 | this.stateLoading = true; 29 | await $fetch("/api/todos/create", { 30 | method: "POST", 31 | body: { task, complete } 32 | }); 33 | 34 | await this.getAllTodos(); 35 | this.stateLoading = false; 36 | useToast().success("Todo created successfully") 37 | } catch (err) { 38 | useToast().error(err.message) 39 | } 40 | }, 41 | 42 | async updateTodo(id: string, complete: boolean) { 43 | try { 44 | await $fetch(`/api/todos/${id}`, { 45 | method: "PUT", 46 | body: { complete } 47 | }); 48 | await this.getAllTodos(); 49 | useToast().success("Todo successfully updated"); 50 | } catch (err) { 51 | useToast().error(err.message) 52 | } 53 | }, 54 | 55 | async deleteTodo(id: string) { 56 | try { 57 | await $fetch(`/api/todos/${id}`, { 58 | method: "DELETE", 59 | body: { id } 60 | }); 61 | await this.getAllTodos(); 62 | useToast().success("Todo successfully deleted") 63 | } catch (err) { 64 | useToast().error(err.message) 65 | } 66 | }, 67 | } 68 | 69 | }) -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/layouts/default.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/nuxt.config.ts: -------------------------------------------------------------------------------- 1 | // https://v3.nuxtjs.org/api/configuration/nuxt.config 2 | export default defineNuxtConfig({ 3 | modules: ["@nuxtjs/tailwindcss", "@pinia/nuxt", "nuxt-icon"], 4 | runtimeConfig: { 5 | MONGO_URI: process.env.MONGO_URI 6 | }, 7 | 8 | // register nitro plugin 9 | nitro: { 10 | plugins: ["@/server/db/index.ts"] 11 | }, 12 | css: ["@/assets/main.css"], 13 | 14 | // transpile packages 15 | build: { 16 | transpile: ["vue-toastification"] 17 | } 18 | }); 19 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "build": "nuxt build", 5 | "dev": "nuxt dev", 6 | "generate": "nuxt generate", 7 | "preview": "nuxt preview", 8 | "postinstall": "nuxt prepare" 9 | }, 10 | "devDependencies": { 11 | "@nuxtjs/tailwindcss": "^5.3.3", 12 | "autoprefixer": "^10.4.12", 13 | "nuxt": "3.0.0-rc.11", 14 | "nuxt-icon": "^0.1.6", 15 | "postcss": "^8.4.17", 16 | "tailwindcss": "^3.1.8" 17 | }, 18 | "dependencies": { 19 | "@pinia/nuxt": "^0.4.2", 20 | "joi": "^17.6.2", 21 | "mongoose": "^6.13.6", 22 | "pinia": "^2.0.22", 23 | "vue-toastification": "^2.0.0-rc.5" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/pages/index.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/plugins/toast.client.ts: -------------------------------------------------------------------------------- 1 | import Toast from "vue-toastification"; 2 | import "vue-toastification/dist/index.css"; 3 | export default defineNuxtPlugin((nuxtApp) => { 4 | nuxtApp.vueApp.use(Toast); 5 | }); -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/server/api/todos/[id].delete.ts: -------------------------------------------------------------------------------- 1 | import TodoModel from "~~/server/models/Todo.model"; 2 | 3 | export default defineEventHandler(async (event) => { 4 | const id = event.context.params.id; 5 | 6 | try { 7 | await TodoModel.findByIdAndDelete(id); 8 | return { 9 | message: "Todo successfully deleted" 10 | } 11 | } catch (err) { 12 | throw createError({ 13 | message: err.message 14 | }) 15 | } 16 | }); 17 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/server/api/todos/[id].put.ts: -------------------------------------------------------------------------------- 1 | import TodoModel from "~~/server/models/Todo.model"; 2 | export default defineEventHandler(async (event) => { 3 | const body = await useBody(event) 4 | const id = event.context.params.id; 5 | try { 6 | await TodoModel.findByIdAndUpdate(id, body); 7 | return { 8 | message: "Todo successfully updated" 9 | } 10 | } catch (err) { 11 | throw createError({ 12 | message: err.message 13 | }) 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/server/api/todos/create.post.ts: -------------------------------------------------------------------------------- 1 | import { TodoSchema } from "~~/server/validation"; 2 | import TodoModel from "~~/server/models/Todo.model"; 3 | 4 | export default defineEventHandler(async (event) => { 5 | // get data from body 6 | const body = await useBody(event); 7 | 8 | // validate the data gotten from the body 9 | let { error } = TodoSchema.validate(body); 10 | 11 | if (error) { 12 | throw createError({ 13 | message: error.message, 14 | statusCode: 400, 15 | fatal: false 16 | 17 | }) 18 | }; 19 | 20 | try { 21 | await TodoModel.create(body); 22 | 23 | return { 24 | message: "Todo created" 25 | } 26 | } catch (err) { 27 | throw createError({ 28 | message: error.message 29 | }) 30 | } 31 | 32 | }) -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/server/api/todos/index.ts: -------------------------------------------------------------------------------- 1 | import TodoModel from "~~/server/models/Todo.model"; 2 | 3 | export default defineEventHandler(async (event) => { 4 | // return all the todos from the db 5 | return await TodoModel.find().sort({"createdAt": -1}); 6 | }) -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/server/db/index.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | import { Nitro } from "nitropack"; 3 | export default async (_nitroApp: Nitro) => { 4 | const config = useRuntimeConfig(); 5 | try { 6 | const conn = await mongoose.connect(config.MONGO_URI) 7 | console.log(`MongoDB connected: ${conn.connection.host}`) 8 | } catch (err) { 9 | console.log(err.message); 10 | process.exit(1); 11 | } 12 | } -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/server/models/Todo.model.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | 3 | const schema: mongoose.Schema = new mongoose.Schema({ 4 | task: { 5 | type: String, 6 | required: true 7 | }, 8 | 9 | complete: { 10 | type: Boolean, 11 | default: false 12 | } 13 | }, { 14 | timestamps: true 15 | }); 16 | 17 | export default mongoose.model("Todo", schema) -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/server/validation.ts: -------------------------------------------------------------------------------- 1 | import Joi from "joi"; 2 | 3 | // Todo validation 4 | export const TodoSchema = Joi.object({ 5 | task: Joi.string().min(3).required(), 6 | complete: Joi.bool() 7 | }); -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | "./components/**/*.{js,vue,ts}", 5 | "./layouts/**/*.vue", 6 | "./pages/**/*.vue", 7 | "./plugins/**/*.{js,ts}", 8 | "./nuxt.config.{js,ts}", 9 | ], 10 | theme: { 11 | extend: { 12 | fontFamily: { 13 | "Roboto": "Roboto" 14 | } 15 | }, 16 | }, 17 | plugins: [], 18 | }; 19 | -------------------------------------------------------------------------------- /Nuxt-FullStack-Todo-App/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // https://v3.nuxtjs.org/concepts/typescript 3 | "extends": "./.nuxt/tsconfig.json" 4 | } 5 | -------------------------------------------------------------------------------- /Nuxt3-Blog/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log* 3 | .nuxt 4 | .nitro 5 | .cache 6 | .output 7 | .env 8 | dist 9 | -------------------------------------------------------------------------------- /Nuxt3-Blog/README.md: -------------------------------------------------------------------------------- 1 | # Nuxt 3 Minimal Starter 2 | 3 | Look at the [nuxt 3 documentation](https://v3.nuxtjs.org) to learn more. 4 | 5 | ## Setup 6 | 7 | Make sure to install the dependencies: 8 | 9 | ```bash 10 | # yarn 11 | yarn install 12 | 13 | # npm 14 | npm install 15 | 16 | # pnpm 17 | pnpm install --shamefully-hoist 18 | ``` 19 | 20 | ## Development Server 21 | 22 | Start the development server on http://localhost:3000 23 | 24 | ```bash 25 | npm run dev 26 | ``` 27 | 28 | ## Production 29 | 30 | Build the application for production: 31 | 32 | ```bash 33 | npm run build 34 | ``` 35 | 36 | Locally preview production build: 37 | 38 | ```bash 39 | npm run preview 40 | ``` 41 | 42 | Checkout the [deployment documentation](https://v3.nuxtjs.org/guide/deploy/presets) for more information. 43 | -------------------------------------------------------------------------------- /Nuxt3-Blog/app.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Nuxt3-Blog/assets/main.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap'); 2 | @tailwind base; 3 | @tailwind components; 4 | @tailwind utilities; 5 | 6 | @layer base { 7 | body { 8 | @apply bg-[#151515] font-Roboto text-white 9 | } 10 | } 11 | 12 | @layer components { 13 | .grid-layout { 14 | @apply grid place-items-center 15 | } 16 | 17 | .flex-between { 18 | @apply flex justify-between items-center 19 | } 20 | 21 | .flex-layout { 22 | @apply flex justify-between items-center px-4 23 | } 24 | 25 | .flex-center { 26 | @apply flex items-center 27 | } 28 | } -------------------------------------------------------------------------------- /Nuxt3-Blog/components/AppLoadingBar.vue: -------------------------------------------------------------------------------- 1 | 74 | 75 | 76 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /Nuxt3-Blog/components/Navbar.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Nuxt 3 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Nuxt3-Blog/components/Toc.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 | Table of contents 26 | 27 | 28 | 29 | 30 | 31 | {{ link.text }} 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Nuxt3-Blog/components/content/Alert.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Nuxt3-Blog/components/content/List.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Nuxt3-Blog/components/content/Wrong.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Nuxt3-Blog/layouts/default.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Nuxt3-Blog/nuxt.config.ts: -------------------------------------------------------------------------------- 1 | // https://v3.nuxtjs.org/api/configuration/nuxt.config 2 | export default defineNuxtConfig({ 3 | modules: ["@nuxtjs/tailwindcss", "@nuxt/content", "nuxt-icon"], 4 | css: ["@/assets/main.css"], 5 | }); 6 | -------------------------------------------------------------------------------- /Nuxt3-Blog/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "build": "nuxt build", 5 | "dev": "nuxt dev", 6 | "generate": "nuxt generate", 7 | "preview": "nuxt preview", 8 | "postinstall": "nuxt prepare" 9 | }, 10 | "devDependencies": { 11 | "@nuxt/content": "^2.1.1", 12 | "@nuxtjs/tailwindcss": "^5.3.5", 13 | "@tailwindcss/line-clamp": "^0.4.2", 14 | "@tailwindcss/typography": "^0.5.7", 15 | "nuxt": "3.0.0-rc.11", 16 | "nuxt-icon": "^0.1.6" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Nuxt3-Blog/pages/[...slug].vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | {{data.title}} 15 | 16 | 17 | 18 | {{data.description}} 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | Page not found 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Nuxt3-Blog/pages/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 17 | 18 | Latest Article 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | {{article.title}} 35 | 36 | 37 | {{ article.description }} 38 | 39 | 40 | 41 | Published On: {{ article.publishedAt }} 42 | 43 | 44 | 45 | 46 | Read 48 | More 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /Nuxt3-Blog/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /Nuxt3-Blog/public/img/image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/selemondev/8-Awesome-Vue-Projects/a33fa2f765a6ae802bb90481bcac94a5f5f032d3/Nuxt3-Blog/public/img/image.jpg -------------------------------------------------------------------------------- /Nuxt3-Blog/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | "./components/**/*.{js,vue,ts}", 5 | "./layouts/**/*.vue", 6 | "./pages/**/*.vue", 7 | "./plugins/**/*.{js,ts}", 8 | "./nuxt.config.{js,ts}", 9 | ], 10 | theme: { 11 | extend: { 12 | fontFamily: { 13 | "Roboto": "Roboto" 14 | } 15 | }, 16 | }, 17 | plugins: [require("@tailwindcss/typography"), require("@tailwindcss/line-clamp")], 18 | }; 19 | -------------------------------------------------------------------------------- /Nuxt3-Blog/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // https://v3.nuxtjs.org/concepts/typescript 3 | "extends": "./.nuxt/tsconfig.json" 4 | } 5 | -------------------------------------------------------------------------------- /Project Images/Netflix-Login-Page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/selemondev/8-Awesome-Vue-Projects/a33fa2f765a6ae802bb90481bcac94a5f5f032d3/Project Images/Netflix-Login-Page.png -------------------------------------------------------------------------------- /Project Images/Nuxt3-Blog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/selemondev/8-Awesome-Vue-Projects/a33fa2f765a6ae802bb90481bcac94a5f5f032d3/Project Images/Nuxt3-Blog.png -------------------------------------------------------------------------------- /Project Images/Nuxt3-Firebase-Login-Page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/selemondev/8-Awesome-Vue-Projects/a33fa2f765a6ae802bb90481bcac94a5f5f032d3/Project Images/Nuxt3-Firebase-Login-Page.png -------------------------------------------------------------------------------- /Project Images/Nuxt3-Mongodb-Home-Page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/selemondev/8-Awesome-Vue-Projects/a33fa2f765a6ae802bb90481bcac94a5f5f032d3/Project Images/Nuxt3-Mongodb-Home-Page.png -------------------------------------------------------------------------------- /Project Images/Vue-Coinbase-Coins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/selemondev/8-Awesome-Vue-Projects/a33fa2f765a6ae802bb90481bcac94a5f5f032d3/Project Images/Vue-Coinbase-Coins.png -------------------------------------------------------------------------------- /Project Images/Vue-Coinbase-Hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/selemondev/8-Awesome-Vue-Projects/a33fa2f765a6ae802bb90481bcac94a5f5f032d3/Project Images/Vue-Coinbase-Hero.png -------------------------------------------------------------------------------- /Project Images/Vue-Instagram-Home-Page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/selemondev/8-Awesome-Vue-Projects/a33fa2f765a6ae802bb90481bcac94a5f5f032d3/Project Images/Vue-Instagram-Home-Page.png -------------------------------------------------------------------------------- /Project Images/Vue-Instagram-Login-Page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/selemondev/8-Awesome-Vue-Projects/a33fa2f765a6ae802bb90481bcac94a5f5f032d3/Project Images/Vue-Instagram-Login-Page.png -------------------------------------------------------------------------------- /Project Images/Vue-Pinia-Store.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/selemondev/8-Awesome-Vue-Projects/a33fa2f765a6ae802bb90481bcac94a5f5f032d3/Project Images/Vue-Pinia-Store.png -------------------------------------------------------------------------------- /Project Images/Vue-Whatsapp-Chat-Page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/selemondev/8-Awesome-Vue-Projects/a33fa2f765a6ae802bb90481bcac94a5f5f032d3/Project Images/Vue-Whatsapp-Chat-Page.png -------------------------------------------------------------------------------- /Project Images/Vue-Whatsapp-Login-Page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/selemondev/8-Awesome-Vue-Projects/a33fa2f765a6ae802bb90481bcac94a5f5f032d3/Project Images/Vue-Whatsapp-Login-Page.png -------------------------------------------------------------------------------- /Vue-Coinbase/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /Vue-Coinbase/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["Vue.volar"] 3 | } 4 | -------------------------------------------------------------------------------- /Vue-Coinbase/README.md: -------------------------------------------------------------------------------- 1 | # Vue 3 + TypeScript + Vite 2 | 3 | This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` 12 |
You have no todos
{{ task.todo 65 | }}
{{v$.username.$errors[0].$message}}
{{v$.email.$errors[0].$message}}
{{v$.password.$errors[0].$message}}
{{v$.confirmPassword.$errors[0].$message}}
Don't have an account yet? 47 | Register 48 |
{{ 62 | task }}
{{data.description}}
{{ article.description }}