{"id":16470800,"url":"https://github.com/preetiraj3697/lingualingo","last_synced_at":"2026-04-11T04:33:04.627Z","repository":{"id":245263728,"uuid":"817714998","full_name":"Preetiraj3697/LinguaLingo","owner":"Preetiraj3697","description":"Interactive platform for language learning","archived":false,"fork":false,"pushed_at":"2024-07-11T20:48:50.000Z","size":2613,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-24T17:48:37.056Z","etag":null,"topics":["clerkjs","drizzle-orm","nextjs14","postgresql","react-admin","reactjs","stripe-checkout","tailwindcss"],"latest_commit_sha":null,"homepage":"https://lingua-lingo.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Preetiraj3697.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-20T09:39:10.000Z","updated_at":"2024-07-11T20:52:30.000Z","dependencies_parsed_at":"2024-06-21T01:26:34.216Z","dependency_job_id":"d4c2ec87-a855-4e7a-b274-87fc700ace09","html_url":"https://github.com/Preetiraj3697/LinguaLingo","commit_stats":null,"previous_names":["preetiraj3697/lingualingo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Preetiraj3697/LinguaLingo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Preetiraj3697%2FLinguaLingo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Preetiraj3697%2FLinguaLingo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Preetiraj3697%2FLinguaLingo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Preetiraj3697%2FLinguaLingo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Preetiraj3697","download_url":"https://codeload.github.com/Preetiraj3697/LinguaLingo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Preetiraj3697%2FLinguaLingo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31669116,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T17:19:37.612Z","status":"online","status_checked_at":"2026-04-11T02:00:05.776Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clerkjs","drizzle-orm","nextjs14","postgresql","react-admin","reactjs","stripe-checkout","tailwindcss"],"created_at":"2024-10-11T12:11:47.561Z","updated_at":"2026-04-11T04:33:04.599Z","avatar_url":"https://github.com/Preetiraj3697.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LinguaLingo - Interactive platform for language learning.\n\n![LinguaLingo - Interactive platform for language learning.](Images/Postser.png \"Lingo - Interactive platform for language learning.\")\n\n## :bangbang: Folder Structure\n\nHere is the folder structure of this app.\n\n```bash\nLinguaLingo/\n|-lingo\n  |- actions/\n    |- challenge-progress.ts\n    |- user-progress.ts\n    |- user-subscription.ts\n  |- app/\n    |-- (main)/\n        |--- courses/\n        |--- leaderboard/\n        |--- learn/\n        |--- quests/\n        |--- shop/\n        |--- layout.tsx\n    |-- (marketing)/\n        |--- footer.tsx\n        |--- header.tsx\n        |--- layout.tsx\n        |--- page.tsx\n    |-- admin/\n        |--- challenge/\n        |--- challengeOption/\n        |--- course/\n        |--- lesson/\n        |--- unit/\n        |--- app.tsx\n        |--- page.tsx\n    |-- api/\n        |--- challengeOptions/\n        |--- challenges/\n        |--- courses/\n        |--- lessons/\n        |--- units/\n        |--- webhooks/stripe/\n    |-- lesson/\n        |--- [lessonId]/\n        |--- card.tsx\n        |--- challenge.tsx\n        |--- footer.tsx\n        |--- header.tsx\n        |--- layout.tsx\n        |--- page.tsx\n        |--- question-bubble.tsx\n        |--- quiz.tsx\n        |--- result-card.tsx\n    |-- favicon.ico\n    |-- globals.css\n    |-- layout.tsx\n  |- components/\n    |-- modals/\n    |-- ui/\n    |-- feed-wrapper.tsx\n    |-- mobile-wrapper.tsx\n    |-- mobile-sidebar.tsx\n    |-- promo.tsx\n    |-- quests.tsx\n    |-- sidebar-item.tsx\n    |-- sidebar.tsx\n    |-- sticky-wrapper.tsx\n    |-- user-progress.tsx\n  |- config/\n    |-- index.ts\n  |- db/\n    |-- drizzle.ts\n    |-- queries.ts\n    |-- schema.ts\n  |- lib/\n    |-- admin.ts\n    |-- stripe.ts\n    |-- utils.ts\n  |- public/\n  |- scripts/\n    |-- prod.ts\n    |-- reset.ts\n    |-- seed.ts\n  |- store/\n    |-- use-exit-modal.ts\n    |-- use-hearts-modal.ts\n    |-- use-practice-modal.ts\n  |- types/\n    |-- canvas.ts\n  |- .env\n  |- .env.example\n  |- .eslintrc.js\n  |- .gitignore\n  |- .prettierrc.json\n  |- components.json\n  |- constants.ts\n  |- drizzle.config.ts\n  |- environment.d.ts\n  |- middleware.ts\n  |- next.config.mjs\n  |- package-lock.json\n  |- package.json\n  |- postcss.config.js\n  |- tailwind.config.ts\n  |- tsconfig.json\n```\n\u003cbr /\u003e\n\n## :toolbox: Getting Started\n\n1. Make sure **Git** and **NodeJS** is installed.\n2. Clone this repository to your local computer.\n3. Create `.env` file in **root** directory.\n4. Contents of `.env`:\n\n```env\n# .env\n\n# disabled next.js telemetry\nNEXT_TELEMETRY_DISABLED=1\n\n# clerk auth keys\nNEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\nCLERK_SECRET_KEY=sk_test_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n\n# neon db uri\nDATABASE_URL=\"postgresql://\u003cuser\u003e:\u003cpassword\u003e@\u003chost\u003e:\u003cpost\u003e/lingo?sslmode=require\"\n\n# stripe api key and webhook\n\n\n# public app url\nNEXT_PUBLIC_APP_URL=http://localhost:3000\n\n# clerk admin user id(s) separated by comma and space (, )\nCLERK_ADMIN_IDS=\"user_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx, user_xxxxxxxxxxxxxxxxxxxxxx\"\n\n```\n\n5. Obtain Clerk Authentication Keys\n\n   1. **Source**: Clerk Dashboard or Settings Page\n   2. **Procedure**:\n      - Log in to your Clerk account.\n      - Navigate to the dashboard or settings page.\n      - Look for the section related to authentication keys.\n      - Copy the `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY` and `CLERK_SECRET_KEY` provided in that section.\n\n6. Retrieve Neon Database URI\n\n   1. **Source**: Database Provider (e.g., Neon, PostgreSQL)\n   2. **Procedure**:\n      - Access your database provider's platform or configuration.\n      - Locate the database connection details.\n      - Replace `\u003cuser\u003e`, `\u003cpassword\u003e`, `\u003chost\u003e`, and `\u003cport\u003e` placeholders in the URI with your actual database credentials.\n      - Ensure to include `?sslmode=require` at the end of the URI for SSL mode requirement.\n\n7. Fetch Stripe API Key and Webhook Secret\n\n   1. **Source**: Stripe Dashboard\n   2. **Procedure**:\n      - Log in to your Stripe account.\n      - Navigate to the dashboard or API settings.\n      - Find the section related to API keys and webhook secrets.\n      - Copy the `STRIPE_API_SECRET_KEY` and `STRIPE_WEBHOOK_SECRET`.\n\n8. Specify Public App URL\n\n   1. **Procedure**:\n      - Replace `http://localhost:3000` with the URL of your deployed application.\n\n9. Identify Clerk Admin User IDs\n\n   1. **Source**: Clerk Dashboard or Settings Page\n   2. **Procedure**:\n      - Log in to your Clerk account.\n      - Navigate to the dashboard or settings page.\n      - Find the section related to admin user IDs.\n      - Copy the user IDs provided, ensuring they are separated by commas and spaces.\n\n10. Save and Secure:\n\n    - Save the changes to the `.env` file.\n\n11. Install Project Dependencies using `npm install --legacy-peer-deps` or `yarn install --legacy-peer-deps`.\n\n12. Run the Seed Script:\n\nIn the same terminal, run the following command to execute the seed script:\n\n```bash\nnpm run db:prod\n```\n\nThis command uses `npm` to execute the Typescript file (`scripts/prod.ts`) and writes challenges data in database.\n\n13. Verify Data in Database:\n\nOnce the script completes, check your database to ensure that the challenges data has been successfully seeded.\n\n14. Now app is fully configured 👍 and you can start using this app using either one of `npm run dev` or `yarn dev`.\n\n**NOTE:** Please make sure to keep your API keys and configuration values secure and do not expose them publicly.\n\n## :camera: Screenshots\n\n\n![Modern UI/UX](/Images/Screenshot%20(67).png \"Modern UI/UX\")\n\n![Quests](/Images/Screenshot%20(79).png \"Quests\")\n\n![Shop](/Images/Screenshot%20(80).png \"Shop\")\n\n\n![lesson](/Images/Screenshot%20(77).png \"lesson\")\n\n\n\n\n## :gear: Tech Stack\n\n[![React JS](https://skillicons.dev/icons?i=react \"React JS\")](https://react.dev/ \"React JS\") [![Next JS](https://skillicons.dev/icons?i=next \"Next JS\")](https://nextjs.org/ \"Next JS\") [![Typescript](https://skillicons.dev/icons?i=ts \"Typescript\")](https://www.typescriptlang.org/ \"Typescript\") [![Tailwind CSS](https://skillicons.dev/icons?i=tailwind \"Tailwind CSS\")](https://tailwindcss.com/ \"Tailwind CSS\") [![Vercel](https://skillicons.dev/icons?i=vercel \"Vercel\")](https://vercel.app/ \"Vercel\") [![Postgresql](https://skillicons.dev/icons?i=postgres \"Postgresql\")](https://www.postgresql.org/ \"Postgresql\")\n\n\n## :gem: Acknowledgements\n\nUseful resources and dependencies that are used in Lingo.\n\n- Thanks to CodeWithAntonio: https://codewithantonio.com/\n- Special Thanks to Kenney Assets: https://kenney.nl/\n- Freesound: https://freesound.org/\n- Elevenlabs AI: https://elevenlabs.io/\n- Flagpack: https://flagpack.xyz/\n\n## 🌐 Connect with me:\n\u003cp align=\"left\"\u003e\n\u003ca href=\"mailto:preetiraj122000@gmail.com\" style=\"text-decoration:none\"\u003e\n  \u003cimg height=\"30\" src = \"https://img.shields.io/badge/gmail-c14438?\u0026style=for-the-badge\u0026logo=gmail\u0026logoColor=white\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://preetiraj3697.github.io/\" target=\"_blank\"\u003e\n   \u003cimg src=\"https://img.shields.io/badge/My%20Portfolio%20%E2%86%92-gray.svg?colorA=655BE1\u0026colorB=4F44D6\u0026style=for-the-badge\"/\u003e\n\u003c/a\u003e\n\u003ca href=\"https://www.linkedin.com/in/preetiraj3697\" style=\"text-decoration:none\"\u003e\n  \u003cimg height=\"30\" src=\"https://img.shields.io/badge/linkedin-blue.svg?\u0026style=for-the-badge\u0026logo=linkedin\u0026logoColor=white\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/Preetiraj3697\" style=\"text-decoration:none\"\u003e\n  \u003cimg height=\"30\" src=\"https://img.shields.io/badge/Github-grey.svg?\u0026style=for-the-badge\u0026logo=Github\u0026logoColor=white\" /\u003e\n\u003c/a\u003e\n \u003ca href=\"https://medium.com/@preetiraj122000\" style=\"text-decoration:none\"\u003e\n  \u003cimg height=\"30\" src = \"https://img.shields.io/badge/Medium-%23E20036.svg?\u0026style=for-the-badge\u0026logo=Medium\u0026logoColor=white\"\u003e\n\u003c/a\u003e\n  \u003ca href=\"https://www.youtube.com/channel/UCUm2fjgbYRGRfiSh4LqSPyA\" style=\"text-decoration:none\"\u003e\n  \u003cimg height=\"30\" src = \"https://img.shields.io/badge/Youtube-FF0000.svg?\u0026style=for-the-badge\u0026logo=Youtube\u0026logoColor=white\"\u003e\n\u003c/a\u003e\n\u003cbr /\u003e\n\n\n \u003cimg  margin-top=\"-50px\" width=\"100%\" src='https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/colored.png' /\u003e \n\n\u003cbr /\u003e\n \n\n\u003cp align=\"center\"\u003e\u003ccode\u003e © 2022 | Preeti Raj \u003c/code\u003e\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpreetiraj3697%2Flingualingo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpreetiraj3697%2Flingualingo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpreetiraj3697%2Flingualingo/lists"}