{"id":22199556,"url":"https://github.com/jonhmchan/t3000","last_synced_at":"2025-10-14T19:38:40.860Z","repository":{"id":146291968,"uuid":"611041150","full_name":"JonHMChan/t3000","owner":"JonHMChan","description":"A starter repository for the T3 stack, a type safe way of creating Next.js applications quickly","archived":false,"fork":false,"pushed_at":"2023-03-08T01:34:30.000Z","size":99,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-24T23:44:55.770Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/JonHMChan.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-03-08T01:28:20.000Z","updated_at":"2023-03-08T01:33:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"45a16dc4-3d31-4020-8ade-e074ca865071","html_url":"https://github.com/JonHMChan/t3000","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JonHMChan/t3000","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JonHMChan%2Ft3000","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JonHMChan%2Ft3000/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JonHMChan%2Ft3000/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JonHMChan%2Ft3000/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JonHMChan","download_url":"https://codeload.github.com/JonHMChan/t3000/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JonHMChan%2Ft3000/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279020655,"owners_count":26086898,"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","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"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":[],"created_at":"2024-12-02T15:15:21.143Z","updated_at":"2025-10-14T19:38:40.854Z","avatar_url":"https://github.com/JonHMChan.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# T3000\n\n*by [@jonhmchan](https://twitter.com/jonhmchan)*\n\nThis is an implementation of the [T3 Stack](https://create.t3.gg/) project ([Discord](https://t3.gg/discord)) bootstrapped with [create-t3-app](https://github.com/t3-oss/create-t3-app). It is an expansion of this repository [t3-complete](https://github.com/juliusmarminge/t3-complete) to include more opinionated technologies and patterns that are being used more frequently by its creator, [@jonhmchan](https://github.com/jonhmchan) for new projects.\n\nTo learn more about the [T3 Stack](https://create.t3.gg/), take a look at the following resources:\n\n- [Documentation](https://create.t3.gg/)\n- [Learn the T3 Stack](https://create.t3.gg/en/faq#what-learning-resources-are-currently-available)\n\n## Technologies\n\n**Server**\n\n- [x] [Next.js](https://nextjs.org), for React based web development\n\n**Storage**\n\n- [x] [PostgreSQL](https://www.postgresql.org/), for relational database storage\n- [x] [Prisma](https://prisma.io), for object relational mapping (ORM), migrations, database GUI\n- [x] [Docker Compose](https://docs.docker.com/compose/), setup for local database\n\n**Data transfer**\n\n- [x] [tRPC](https://trpc.io), for type-safe data transfer\n- [x] [superjson](https://github.com/blitz-js/superjson), for JS serialization on a superset of JSON\n- [x] [NextAuth.js](https://next-auth.js.org), for authentication\n\n**State management**\n\n- [ ] [zustand](https://github.com/pmndrs/zustand), simple flex style state management\n\n**User interface**\n\n- [x] [Tailwind CSS](https://tailwindcss.com), for styling, user interface, design system\n- [x] [Radix UI](https://radix-ui.com), for base user interface components\n- [x] [Storybook](https://storybook.js.org/), for user interface management\n- [x] [react-hook-form](https://react-hook-form.com), for hooks-based forms\n- [x] [`@next/font`], for optimized fonts\n- [x] [lucide](https://lucide.dev/), for icons\n- [ ] [Autoanimate](https://auto-animate.formkit.com/), for drop-in React animations\n\n**Testing**\n\n- [x] [Playwright](https://playwright.dev), for end-to-end (e2e) testing\n- [x] [Vitest](https://vitest.dev), for unit/integration tests, has API compatibility with [Jest](https://jestjs.io/)\n\n**Analytics**\n\n- [x] [Plausible](https://plausible.io/), for analytics and event tracking\n- [x] [Sentry](https://sentry.io/), for monitoring\n\n**Messaging**\n\n- [x] [Twilio](https://twilio.com/), for SMS\n- [x] [SendGrid](https://sendgrid.com/), for emails\n\n**Billing**\n\n- [ ] [Stripe](https://stripe.com/)\n\n**Machine learning**\n\n- [x] [Open AI](https://openai.com/)\n\n**Deployment**\n\n- [x] [GitHub](https://github.com/), for version control and CI/CD\n- [x] [Vercel](https://vercel.com/), for highly integrated Next deployment\n- [x] [Neon](https://neon.tech/), for serverless branchable Postgres\n\n## Getting Started\n\n1. Install deps\n\n```bash\npnpm install\n```\n\n2. Start the db\n\n```bash\ndocker compose up -d\n```\n\n3. Update env and push the schema to the db\n\n```bash\ncp .env.example .env\npnpm prisma db push\n```\n\n4. Start the dev server\n\n```bash\npnpm dev\n```\n\n5. Run the tests\n\n```bash\npnpm test:unit:watch\n```\n\n## Local Development\n\n**Open Prisma Studio for local database GUI**\n\n```bash\nnpx prisma studio\n```\n\n**Open Storybook for local component GUI**\n\n```bash\npnpm run storybook\n```\n\n**Connect to production database**\n\n```bash\npsql -h pg.neon.tech\n```\n\n### Testing\n\nThere are several `pnpm test` commands you can use for local testing:\n\n**Run all tests with a coverage report**\n\nThis will run all unit tests, e2e tests, and provide a coverage report. `pnpm dev` should **not** be running.\n\n```bash\npnpm test\n```\n\n**Unit tests**\n\n```bash\npnpm test:unit\n```\n\nWhile watching for changes while `pnpm dev` is running:\n\n```bash\npnpm test:unit:watch\n```\n\n**End-to-end (e2e) tests**\n\n`pnpm dev` should **NOT** be running when running e2e tests locally. This is because Playwright will start the server on\nthe same port and there may be unexpected side effects due to conflicts.\n\n```bash\npnpm test:e2e\n```\n\nThere is no support for e2e tests in watch mode.\n\n**Coverage report**\n\nTesting uses [c8](https://vitest.dev/guide/coverage.html) for coverage support. To get a report:\n\n```bash\npnpm test:unit:coverage\n```\n\nWhile watching for changes while `pnpm dev` is running:\n\n```bash\npnpm test:unit:coverage:watch\n```\n\n## Deployment\n\nThis repository is attached to GitHub and requires all new code to be built in a branch with all tests, linting, and type checking to pass before merging and deploying automatically. These rules also apply to GitHub administrators.\n\n1. Ensure prettier has run with `pnpm format`\n2. Ensure tests pass with `pnpm test`\n3. Push to remote branch and wait for tests to pass (see `.github/workflows/ci.yml`)\n4. Merge into main, triggering automatic deploy by Vercel\n\n**Pull Requests**\n\nWe use the following conventions when naming branches:\n\n1. `feat/*` is for net new features\n2. `bug/*` is for a bug fix\n3. `test/*` is for any tests, typically for the pipeline\n\nAll pull requests should have a description.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonhmchan%2Ft3000","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjonhmchan%2Ft3000","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonhmchan%2Ft3000/lists"}