{"id":16211191,"url":"https://github.com/neogeek/create-app","last_synced_at":"2026-04-28T16:06:32.405Z","repository":{"id":142017973,"uuid":"606222824","full_name":"neogeek/create-app","owner":"neogeek","description":"▲ A heavily opinionated starter template.","archived":false,"fork":false,"pushed_at":"2023-11-11T03:26:49.000Z","size":687,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-07T21:40:44.625Z","etag":null,"topics":["nextjs","tailwindcss","typescript","vercel"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/neogeek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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":{"ko_fi":"scottdoxey"}},"created_at":"2023-02-24T22:05:45.000Z","updated_at":"2024-03-28T01:38:32.000Z","dependencies_parsed_at":"2024-11-03T16:35:31.476Z","dependency_job_id":null,"html_url":"https://github.com/neogeek/create-app","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/neogeek/create-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neogeek%2Fcreate-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neogeek%2Fcreate-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neogeek%2Fcreate-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neogeek%2Fcreate-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neogeek","download_url":"https://codeload.github.com/neogeek/create-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neogeek%2Fcreate-app/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263331778,"owners_count":23450157,"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":["nextjs","tailwindcss","typescript","vercel"],"created_at":"2024-10-10T10:46:05.457Z","updated_at":"2026-04-28T16:06:27.346Z","avatar_url":"https://github.com/neogeek.png","language":"TypeScript","funding_links":["https://ko-fi.com/scottdoxey"],"categories":[],"sub_categories":[],"readme":"\u003e ⚠️ Notice: This repository is under active development. Things will be missing, broken, or incomplete as development continues.\n\n\u003ch1 align=\"center\"\u003e\n    \u003cimg src=\"./splash.png\" alt=\"@neogeek/create-app - Next.js, TypeScript, tRPC, zod, Prisma and more.\" width=\"700\" /\u003e\n\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Join the chat at](https://img.shields.io/badge/discord-join%20chat-7289DA.svg)](https://discord.gg/nNtFsfd)\n[![Tests](https://github.com/neogeek/create-app/actions/workflows/test.workflow.yml/badge.svg)](https://github.com/neogeek/create-app/actions/workflows/test.workflow.yml)\n[![MIT License](https://img.shields.io/badge/license-MIT-brightgreen)](https://github.com/neogeek/create-app/blob/main/LICENSE)\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fneogeek%2Fcreate-app\u0026env=DATABASE_URL,GCP_OAUTH_CLIENT_ID,GCP_OAUTH_CLIENT_SECRET,GCP_OAUTH_REDIRECT_URL,JWT_ACCESS_TOKEN_PRIVATE_KEY,JWT_ACCESS_TOKEN_PUBLIC_KEY,JWT_REFRESH_TOKEN_PRIVATE_KEY,JWT_REFRESH_TOKEN_PRIVATE_KEY,API_SECRET_KEY\u0026demo-title=%40neogeek%2Fcreate-app\u0026demo-url=https%3A%2F%2Fcreate-app-vercel-demo.vercel.app%2F)\n[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/neogeek/create-app)\n\n\u003c/div\u003e\n\n## What is this?\n\nThis repo is my heavily opinionated starter template. Every so often I like to revisit what my tech stack consists of and currently this is it. The focus of this project is to maintain a base set of functionality for creating a bleeding edge app in Next.js with end to end type safety and testing built in.\n\nEveryone is welcome to use this starter template, report bugs, and suggest changes. Keep in mind that this is my personal tech stack, so I might not implement all suggestions.\n\n## Tech Stack\n\n- ▲ [Turborepo](https://turbo.build/repo) - Monorepo support\n- ▲ [Next.js 14](https://nextjs.org/) - React framework\n- 🦺 [TypeScript](https://www.typescriptlang.org/) - Type safety code base\n- 📦 [tRPC](https://trpc.io/) - Type safe client and server side API requests\n- 🎯 [trpc-openapi](https://github.com/jlalmes/trpc-openapi) - Dynamic REST endpoints and automatic Swagger documentation\n- 💎 [zod](https://zod.dev/) - Data validation and parsing\n- ✅ [validator](https://github.com/validatorjs/validator.js) - String validation types\n- 🏔️ [Prisma](https://www.prisma.io/) - Database ORM\n  - 🗄️ [Postgres](https://www.postgresql.org/) - Local database\n  - ⚡️ [Supabase](https://supabase.com/) - Remote database\n  - 🪐 [PlanetScale](https://planetscale.com/) - Optional remote database\n- 🍃 [Tailwind CSS](https://tailwindcss.com/) - Utility styles\n- 📝 [Tailwind Forms Plugin](https://github.com/tailwindlabs/tailwindcss-forms) - Form utility styles\n- 🪄 [Framer Motion](https://www.framer.com/motion/) - CSS animations\n- 🃏 [Jest](https://jestjs.io/) - Unit tests\n- 🚨 [Sentry](https://sentry.io/) - Server and client side error logging\n- 📘 [Storybook](https://storybook.js.org/) - Component library\n  - 🐙 [Testing Library](https://testing-library.com/) - Testing library for UI components\n- 🎭 [Playwright](https://playwright.dev/) - Running end to end tests on the web app\n- 🎛️ [Github Actions](https://github.com/features/actions) - Continuous integration testing\n- 🐳 [Docker](https://www.docker.com/) - Optional local development\n  - 🌊 [DigitalOcean](https://www.digitalocean.com/) - Remote deployment with Docker\n- ▲ [Turborepo](https://turbo.build/repo) - Monorepo support\n- ▲ [Vercel](https://vercel.com/) - Remote deployment\n- 🌎 [Netlify](https://www.netlify.com/) - Remote deployment\n\n## Getting Started\n\n1. Fork, \"Use this template\" via GitHub or clone locally and remove remote to create a repo.\n1. Install dependencies with `npm ci`.\n1. Create an `.env.local` file in `./apps/web/` with the contents of `.env.example`\n1. Generate JWT keys by running `./apps/web/bin/generate_jwt_keys.sh \u003cpassword\u003e`.\n1. Setup Google OAuth for your app \u003chttps://support.google.com/cloud/answer/6158849\u003e and copy the `id` and `secret` into `.env.local`.\n1. Add \u003chttp://localhost:3000/oauth/google/callback\u003e to the list of **Authorized redirect URIs** for your Google OAuth web application.\n1. Generate the database types with `npm run db:generate` (if you have VS Code open, run TypeScript: Reload project to see the updated types)\n1. Setup the database with `npm run db:push`\n1. Run with `npm run dev`\n\n## Database\n\n### Postgres\n\n1. Install [Postgres](https://www.postgresql.org/)\n1. Create `create-app` database\n1. Setup the database with `npm run db:push`\n\n### [supabase](https://supabase.com/)\n\n1. Create database\n1. Go to Project Settings \u003e Database\n1. Copy and paste the connection string into `.env.local` as the value for `DATABASE_URL`\n1. Replace `[YOUR-PASSWORD]` with your password you made when creating the database.\n1. Append `?pgbouncer=true` to the connection string if Connection Pooling is enabled.\n1. Push changed to database with `npm run db:push`\n\n### [PlanetScale](https://planetscale.com/)\n\n1. Create database\n1. Go to Settings \u003e Password\n1. Create new password\n1. Supply a name for the password\n1. Hit generate password\n1. Change the Connection string dropdown to `Prisma`\n1. Copy and paste the URL into `.env.local`\n1. Open `packages/database/prisma/schema.prisma` and update the datasource value to the following:\n\n   ```\n   datasource db {\n    provider     = \"mysql\"\n    url          = env(\"DATABASE_URL\")\n    relationMode = \"prisma\"\n   }\n   ```\n\n1. Push changed to database with `npm run db:push`\n\n## Logging\n\n### Sentry\n\nIt's recommended that when setting up Sentry that you limit the allowed domains in your project settings so only logs from your application can be logged.\n\n## Docker\n\nThe included docker setup can be used for developing on a machine without Node.js or Postgres installed. It can also be modified to be deployed to an online service, like DigitalOcean.\n\n#### Build and run images\n\n```bash\n$ docker compose up --detach\n```\n\n#### Cleanup\n\n```bash\n$ docker compose down\n```\n\n## Testing\n\n### Jest\n\nJest tests are setup to work both locally and via GitHub Actions.\n\nRun the following to run all tests that match `*.test.ts` or `*.test.tsx`.\n\n```bash\n$ npm test\n```\n\nOr if you want to run a specific file:\n\n```bash\n$ npm test -- -- ./apps/web/src/modules/auth/controller.test.ts\n```\n\n### Storybook\n\nStorybook testing requires storybook to be built and the static storybook running on a server in the background. The following command does all of this for you to prevent having to have two terminal windows open.\n\n```bash\n$ npm run test:styleguide\n```\n\nIf you would like to run the tests in two terminal windows you can run the following commands:\n\n```bash\n$ npm run storybook-static\n```\n\n```bash\n$ npm run test-storybook\n```\n\n### GitHub Actions\n\nGitHub Actions workflows will lint all files, attempt a build and then run all unit tests. This workflow will run either when commits are pushed directly to the main branch or when a Pull Request is created (not a draft).\n\n## Questions\n\nIf you have any questions regarding the use of **@neogeek/create-app**, please use either [GitHub Discussions](https://github.com/neogeek/create-app/discussions/) or [Discord server](https://discord.gg/nNtFsfd). The issue tracker is to be used for bug reports and feature requests only.\n\n## Contributing\n\nBe sure to review the [Contributing Guidelines](./CONTRIBUTING.md) before logging an issue or making a pull request.\n\n## Troubleshooting\n\n### `prepared statement \\\"s0\\\" already exists`\n\nIf you are having issues making database requests to your Supabase database, make sure you are using the correct connection string (pooled or unpooled). See this ticket for more information \u003chttps://github.com/prisma/prisma/issues/12121\u003e and the [Prisma documentation](https://www.prisma.io/docs/guides/performance-and-optimization/connection-management/configure-pg-bouncer#add-pgbouncer-to-the-connection-url).\n\n```\nDATABASE_URL=postgresql://USER:PASSWORD@HOST:PORT/DATABASE?pgbouncer=true\"\n```\n\n## License\n\n[MIT](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneogeek%2Fcreate-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneogeek%2Fcreate-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneogeek%2Fcreate-app/lists"}