{"id":24874694,"url":"https://github.com/dirheimerb/next-firecourse","last_synced_at":"2025-07-12T20:39:14.466Z","repository":{"id":105234824,"uuid":"501657804","full_name":"dirheimerb/next-firecourse","owner":"dirheimerb","description":null,"archived":false,"fork":false,"pushed_at":"2023-01-27T07:34:39.000Z","size":2784,"stargazers_count":0,"open_issues_count":9,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-27T02:15:46.643Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/dirheimerb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"rwieruch","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2022-06-09T13:09:59.000Z","updated_at":"2022-06-09T13:10:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"144c6ce5-f37b-46ba-86cc-934b8def804f","html_url":"https://github.com/dirheimerb/next-firecourse","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"rwieruch/nextjs-firebase-authentication","purl":"pkg:github/dirheimerb/next-firecourse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirheimerb%2Fnext-firecourse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirheimerb%2Fnext-firecourse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirheimerb%2Fnext-firecourse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirheimerb%2Fnext-firecourse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dirheimerb","download_url":"https://codeload.github.com/dirheimerb/next-firecourse/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dirheimerb%2Fnext-firecourse/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265049820,"owners_count":23703595,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2025-02-01T07:28:12.005Z","updated_at":"2025-07-12T20:39:14.443Z","avatar_url":"https://github.com/dirheimerb.png","language":"TypeScript","funding_links":["https://github.com/sponsors/rwieruch","https://developer.paypal.com/","https://developer.paypal.com/docs/checkout/"],"categories":[],"sub_categories":[],"readme":"# My Course Platform\n\n[![Build Status](https://travis-ci.org/rwieruch/nextjs-firebase-authentication.svg?branch=master)](https://travis-ci.org/rwieruch/nextjs-firebase-authentication)   [![Greenkeeper badge](https://badges.greenkeeper.io/rwieruch/nextjs-firebase-authentication.svg)](https://greenkeeper.io/)\n\n- [Demo](https://courses.robinwieruch.de/)\n- [Thread on \"What went into this project\"](https://twitter.com/rwieruch/status/1243209627707346944)\n\n**Server-Side User Management with**\n\n- GraphQL ([Tutorial](https://www.robinwieruch.de/graphql-apollo-server-tutorial)) and Firebase ([Tutorial](https://www.robinwieruch.de/complete-firebase-authentication-react-tutorial))\n  - Sign In\n  - Sign Up\n  - Sign Out\n  - Email Change\n  - Password Change\n  - Password Reset\n\n**Client and Server-Side Protected Routes with**\n\n- Next.js Authorization and Firebase Session\n\n**Payment with**\n\n- Stripe\n- PayPal\n\n**Styling with**\n\n- [Ant Design](https://ant.design/)\n- Styled Components ([Tutorial](https://www.robinwieruch.de/react-styled-components))\n- Page Transitions\n\n**Type Support with**\n\n- TypeScript\n\n**Tested Code Base with**\n\n- [Jest](https://jestjs.io/) ([Tutorial](https://www.robinwieruch.de/react-testing-jest))\n- [React Testing Library](https://github.com/testing-library/react-testing-library)\n- [Apollo Mocks](https://www.apollographql.com/docs/react/development-testing/testing/)\n\n**Environment Variables with**\n\n- [Dotenv](https://github.com/motdotla/dotenv)\n\n**Absolute Imports with**\n\n- Babel Module Resolver ([Tutorial](https://www.robinwieruch.de/babel-module-resolver/))\n\n**Sentry**\n\n**More Features**\n\n- Discounts with Coupons\n- Affiliate Marketing with Partner Program\n\n## Installation\n\n- `git clone git@github.com:rwieruch/nextjs-firebase-authentication.git`\n- `cd nextjs-firebase-authentication`\n- See other installation instructions below ...\n- `npm install`\n- `npm run dev`\n- Visit http://localhost:3000/\n\n### .env file\n\nCreate a _.env_ file. If using git, add it to your _.gitignore_ file.\n\nValues may differ for development and production:\n\n```\nBASE_URL=http://localhost:3000\n\nFIREBASE_API_KEY=\nFIREBASE_AUTH_DOMAIN=\nFIREBASE_DATABASE_URL=\nFIREBASE_PROJECT_ID=\nFIREBASE_STORAGE_BUCKET=\nFIREBASE_MESSAGING_SENDER_ID=\nFIREBASE_APP_ID=\n\nPAYPAL_CLIENT_ID=\nPAYPAL_CLIENT_SECRET=\n\nSTRIPE_CLIENT_ID=\nSTRIPE_CLIENT_SECRET=\nSTRIPE_WEBHOOK_SECRET=\n\nCOUPON_SALT=\nCOUPON_URL=\nFIREBASE_ADMIN_UID=\n\nSENTRY_DSN=\n\nREVUE_TOKEN=\n\nSLACK_TOKEN=\n\nCONVERTKIT_API_KEY=\nCONVERTKIT_FORM_ID=\n\nS3_ENDPOINT=\nS3_ACCESS_KEY_ID=\nS3_SECRET_ACCESS_KEY=\nS3_BUCKET=\n\nDATABASE_TYPE=\nDATABASE_HOST=\nDATABASE_PORT=\nDATABASE_USERNAME=\nDATABASE_PASSWORD=\nDATABASE_NAME=\nDATABASE_SSL_CERTIFICATE=\n```\n\n- [FIREBASE](https://firebase.google.com/)\n  - Activate Email/Password Sign-In Method for your Firebase Project\n- [PAYPAL](https://developer.paypal.com/)\n  - [Checkout](https://developer.paypal.com/docs/checkout/)\n- [STRIPE](https://stripe.com/)\n  - [Checkout](https://stripe.com/docs/payments/checkout/one-time)\n  - [Webhook](https://stripe.com/docs/payments/checkout/fulfillment#webhooks)\n\n### .firebaseServiceAccountKey.json file\n\nVisit [here](https://firebase.google.com/docs/admin/setup/#initialize-sdk) for Firebase Admin SDK and generate a _firebaseServiceAccountKey.json_ file from there which should be in your project's root folder. If using git, add it to your _.gitignore_ file.\n\n### Admin Account\n\nIf you want to have an account with Firebase admin claims, create this Firebase account first via UI, then set the user account's `uid` in _.env_ with `FIREBASE_ADMIN_UID`, and restart your server.\n\n### Stripe CLI for Webhook in Development Mode\n\n[Stripe CLI](https://stripe.com/docs/stripe-cli)\n\n```\nstripe login\n# follow instructions\nstripe listen --forward-to localhost:3000/api/stripe-webhook\n# copy and paste secret\n```\n\nThe `secret` can be used in _.env_:\n\n```\nSTRIPE_WEBHOOK_SECRET=secret\n```\n\nThen fake a request with Stripe CLI `stripe payment_intents create --amount=100 --currency=usd` will work. Make sure the application is running too. Or use the web application's Stripe Checkout feature for real.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdirheimerb%2Fnext-firecourse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdirheimerb%2Fnext-firecourse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdirheimerb%2Fnext-firecourse/lists"}