{"id":16159531,"url":"https://github.com/frankhereford/katamino","last_synced_at":"2026-01-12T09:42:18.797Z","repository":{"id":62719209,"uuid":"549004940","full_name":"frankhereford/katamino","owner":"frankhereford","description":"A T3 Stack Experiment with CI","archived":false,"fork":false,"pushed_at":"2023-03-10T10:09:23.000Z","size":3015,"stargazers_count":0,"open_issues_count":38,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-02T11:12:28.846Z","etag":null,"topics":["ci","nextjs","pentomino","prisma","railway","t3-stack","trpc","typescript","vercel"],"latest_commit_sha":null,"homepage":"https://katamino.sheep.army","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/frankhereford.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":"2022-10-10T14:22:55.000Z","updated_at":"2023-01-31T20:35:10.000Z","dependencies_parsed_at":"2024-10-27T19:15:30.513Z","dependency_job_id":"af1babe4-63be-497d-b931-b2b4334dfcfd","html_url":"https://github.com/frankhereford/katamino","commit_stats":null,"previous_names":[],"tags_count":55,"template":false,"template_full_name":null,"purl":"pkg:github/frankhereford/katamino","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frankhereford%2Fkatamino","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frankhereford%2Fkatamino/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frankhereford%2Fkatamino/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frankhereford%2Fkatamino/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/frankhereford","download_url":"https://codeload.github.com/frankhereford/katamino/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frankhereford%2Fkatamino/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28337740,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T06:09:07.588Z","status":"ssl_error","status_checked_at":"2026-01-12T06:05:18.301Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["ci","nextjs","pentomino","prisma","railway","t3-stack","trpc","typescript","vercel"],"created_at":"2024-10-10T01:58:51.302Z","updated_at":"2026-01-12T09:42:18.780Z","avatar_url":"https://github.com/frankhereford.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Stuff I learned\n\n* 🧘 Release to main\n  * Works great for this project\n  * Is that a comment on a solo project?\n* 🤖 GitHub actions\n  * dependabot combiner\n  * Build prod/pr with respect to migrations\n  * dependabot config\n  * codeQL analysis\n  * default labels on PR\n  * label driven automatic versioning 🔥\n    * automatic releases\n* 🏷️ GitHub release tags; we should bump versions on every PR via PR labels\n  * Via: \u003chttps://github.com/marketplace/actions/tag-release-on-push-action\u003e\n* 🌼 Daisy UI\n  * [Extendable](https://github.com/frankhereford/katamino/blob/main/tailwind.config.cjs#L5-L10)\n* 💨 Tailwind CSS\n  * Bootstrap but mega-🍄\n  * Closely watch the animation on \u003chttps://tailwindcss.com/\u003e, it's not an exaggeration\n  * Meaningful classes in DOM\n* 🌈 Prisma\n  * TypeScript Safe Apollo but with [useQuery](https://tanstack.com/query/v4/docs/reference/useQuery)\n  * Generated library specific to your schema with all the typing information in it, so your IDE goes brrr. 💪\n  * 🔬 `prisma studio`\n* 🧩 Migrations\n  * Migrations\n    * If a change can't be applied (such as adding a non-null constraint on a column with null values, for example), it will walk you through your options\n    * Migrations are a file of SQL which explicitly control the change, like usual\n    * No down.sql migrations (unless you want them)\n    * Non-breaking changes require zero SQL authorship\n      * Complex or breaking changes (like the not-null example above), give you SQL and let you decide how to handle it\n      * Squash multiple migrations in a feature-branch into one for the merge\n    * This is still an unforgiving, complex problem, but it's so helpful to have tooling for it\n  * Prisma schema language\n    * 😔 Views are [not supported](https://github.com/prisma/prisma/issues/678) out of the box, yet\n  * Prototyping `prisma db push`\n* 🌱 Database Seeding\n  * ♻️ Idempotent seeding operation\n* 🚀 CI\n  * New deploy preview per PR\n    * Railway DB per PR\n      * With cleanup\n    * Easy to hook up local instance to a PR's database (or staging)\n  * GitHub PR comments from actions\n    * Includes link to deploy \u0026 DB connection credentials\n  * 1-2 minute deploys\n  * All the check marks, build-tests \u0026 environments ✨\n* 🏂 Lambdas\n  * \u003chttps://vercel.com/docs/concepts/functions/serverless-functions\u003e\n    * ♾️ Infinitely scalable, z-e-r-o work\n  * No middleware, no `graphql-engine`\n    * No query languages (GraphQL, SQL)\n* 🤖 Vercel (optimization, CDN, etc)\n  * 📈 Meaningful analytics\n* 🔑 Auth0\n  * Wildcard domain login, works on every deployment (prod → local), same pool of users (or not!, just as easy)\n* ⌨️ TypeScript\n* 🔺 NextJS\n* 🔭 tRPC\n  * The backend is a set of functions you write in JavaScript\n    * They take arguments and return something, just like normal\n    * The type of the arguments and the return value are type inferred\n      * 🪄 The /functions/ define the API, no extra work\n    * 🧙‍♀️ Automagic swagger compliant REST API with [trpc-openapi](https://github.com/jlalmes/trpc-openapi)\n* 🚄 Railway DBs\n  * Dev DB per Developer, not local\n    * Back to just running `npx next dev` or `npm start dev`\n    * Just need a `.env` file with your personal `DATABASE_URL` configured it in\n  * ☁️ Not a requirement; totally fine to keep production DB on AWS with strong protections\n* 💀 Dependabot\n  * Has [config](https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file)\n* 🤑 Cheap!\n  * Free tiers are generous (Vercel \u0026 Railway), pay-per-compute after that\n* 🐛 VSCode debugging\n\n\n## Secrets\n\nThe repository has the following secrets defined for its actions and\nintegrations. Notable are the auth related ones (GitHub \u0026 Auth0 below) which are\ndependent on which OAuth provider you choose to use with NextAuth. I'm not 100%\nsure they are all required anymore. The app isn't built on the GitHub action\nimage, it's on Vercel. Railway generates the secrets, and does not have any\ninput secrets for itself.\n\n### GitHub Action Secrets\n\n```bash\nAUTH0_CLIENT_ID\nAUTH0_CLIENT_SECRET\nAUTH0_ISSUER\nDATABASE_URL\nGH_FINEGRAIN_TOKEN\nGH_ID\nGH_PAT\nGH_SECRET\nNEXTAUTH_SECRET\nNEXTAUTH_URL\nRAILWAY_CONFIG\nRAILWAY_PROJECT_ID\nRAILWAY_TOKEN\nVERCEL_CONFIG\nVERCEL_ORG_ID\nVERCEL_PROJECT_ID\nVERCEL_TOKEN\n```\n\n### Vercel Deployment Secrets\n\n```bash\nDATABASE_URL\nGITHUB_SECRET\nGITHUB_ID\nAUTH0_CLIENT_SECRET\nAUTH0_ISSUER\nAUTH0_CLIENT_ID\nNEXTAUTH_SECRET\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrankhereford%2Fkatamino","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrankhereford%2Fkatamino","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrankhereford%2Fkatamino/lists"}