Epic Stack Decisions

Why on earth did they do that?

This directory contains all the decisions we've made for this starter template and serves as a record for whenever we wonder why certain decisions were made.

Documenting these decisions provides insight into the thought process and tradeoffs considered when building the Epic Stack. The documents explain the context around a decision, what choice was made, and what the implications are.

Decisions in here are never final. As new information emerges or requirements change, previous decisions may need revisiting. However, these documents should serve as a good way for someone to come up to speed on why certain decisions were made originally.

Having this decisions log makes it easier for contributors to understand the rationale behind the codebase, rather than just wondering "why did they do it that way?" It also helps ensure decisions are well-considered, since the process of writing out a decision document forces critical thinking.

Over time, these decision records create a knowledge base full of architectural insights and lessons learned while building the Epic Stack. New contributors can reference past decisions to avoid repeating previous mistakes and build on proven solutions.

So when you encounter an questionable choice in the codebase, consult the decision docs first before assuming there was no rationale behind it! Chances are, there is an entry explaining exactly why it was done that way.

1:TypeScript Only2:Email Service3:SQLite Database4:GitHub Actions CI5:Client Preference Cookies6:Native ESM7:Sessions8:Content Security Policy9:Region Selection10:Memory Swap11:Sitemaps12:CUIDs13:Email Verification Code14:TOTP15:Monitoring16:Source Maps17:Migrating to Resend18:Images19:Components20:Icons21:Node.js LTS22:Report-only CSP23:Route-based Dialogs24:Change Email25:Rate Limiting26:Path Aliases27:Toasts28:Permissions (RBAC)29:Remix Auth30:GitHub Auth31:Imports32:CSRF33:Honeypot Fields
Copyright © 2023 Kent C Dodds