The Epic Stack
Kent C. Dodds
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/8882443/testing-trophy.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/9292229/profile-transparent.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10464387/kody.png)
Let's wake up
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/4757643/big-smile.png)
Your brain needs this 🧠
Content Warning
Sadness... 😭
Modern web development is fantastic.
There are so many great tools available!
exhausting.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/8995159/react-big.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461394/phoenix.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461395/rails.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461396/angular.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461397/astro.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461398/laravel.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461399/qwik.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461400/solid.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461401/styled-components.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461402/svelte.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461403/vanilla-extract.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461404/vue.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/8991262/tailwind.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/8991205/postcss.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/8991274/redis.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/9481857/testing-library.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461409/msw.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/8991217/jest.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/8991207/cypress.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461415/redwoodjs.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461416/236854590-c3574ee4-0d55-4e96-a6b7-e435969a8c31.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461417/11ty.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461420/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461421/django-logo-positive.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461423/236356589-fd6ad6e6-9510-4ff3-91ad-4836ca1c64f5.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/7740256/jsdom.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/8991263/xstate.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/8991223/postgres.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461426/mysql-logo_2800x2800_pixels1-165789198.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/8991215/framer-motion.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461431/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/8991214/flyio.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/7740290/react_testing_library.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461463/fathom-analytics.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461464/google-analytics.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461474/emotion.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461476/blitz.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461482/turborepo.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461485/sentry.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461486/cloudflare.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461491/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461493/sanity.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/3978252/redux.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461499/17545810.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461500/digital-ocean.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461508/rollup.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461523/partykit.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461524/react-query.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461526/mux.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461532/fastly.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461536/express.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461538/firebase.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461541/fontawesome.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461558/lodash.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461576/pnpm1.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461584/rome.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461585/flight-control.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461592/applitools.com_.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/9951940/1200x627_-_Glowing.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10451043/dizzy-elmo.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10465793/pasted-from-clipboard.png)
Real talk
Almost whatever you choose will probably be fine.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461633/indecisive.gif)
And yet...
And you know it...
On the one hand
On the other
It'll probably be fine...
You have to live with this...
And then...
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461648/herding-cats.gif)
Getting everyone aligned
And...
And then...
wiring everything together...
But you just want to ship
I've been around.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10463690/tangled-knives.gif)
And I've got opinions...
Introducing...
An opinionated project starter and reference
A Project Starter
npx create-epic-app
A Reference Implementation
With 🤌 docs
github.com/
epicweb-dev/epic-stack
Decision Documents
HT Remix team
github.com/epicweb-dev/ epic-stack/tree/main/docs/decisions
Guiding Principles
- Limit Services
- Include Only Most Common Use Cases
- Minimize Setup Friction
- Optimize for Adaptability
- Only One Way
- Offline Development
The opinions...
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10463734/tell_me.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10463746/grafana-logo-1.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/8991285/github-actions.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/9481857/testing-library.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461409/msw.png)
Today
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/7740290/react_testing_library.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/8995159/react-big.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/8991205/postcss.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461423/236356589-fd6ad6e6-9510-4ff3-91ad-4836ca1c64f5.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10461536/express.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10788371/pasted-from-clipboard.png)
Staging/Production deployment
Horizontally scalable / Multi-region setup
Transactional Email
User data export
Content-Security Policy
SEO (sitemap/robots)
Decision documents
Toast messages
Native ESM
Caching + Admin Cache management
Marketing pages
Error Boundaries
Username/Password
Two Factor Authentication
Email Verification
Profile Photo
Forgot Password
Extensible Third Party Auth
Change Email
Profile
Database migrations
Radix + Shadcn + Tailwind Components
Images
Role-Based Access Control
Fonts
Cross-site Request Forgery Protection
Server-timing headers
Healthcheck
Full-Trophy Testing with test database
Database seeding (local and production)
TypeSafe, Progressively Enhanced Forms (Zod + Conform)
Hot Module Replacement / Hot Data Revalidation
Cross-site scripting Protection
Rate Limiting
Production Error Tracking with Sentry
Built-in pre-configured swapfile
Production monitoring
Multi-instance SQLite
Honeypot
Secrets management
Destructive Re-verification
Theming
Icons
Local Offline Development Support
Server-side User Timezone detection
Examples
Framer Motion
Epic Stack + OpenAI
Prisma Client Extensions
Epic Stack + Storybook
Socket.IO
User Impersonation
Epic Stack + Tailwind CSS Plugin
Epic Stack + GitHub Auth
Epic Stack + MongoDB as the Database
Epic Stack Custom Themes
Epic Stack + OpenID Connect Auth (Google)
Epic Stack + Fathom Analytics
Epic Stack + Tenant Users
Epic Stack + i18n
Epic Stack + Argos
Epic Stack monorepo with pnpm + turbo
Unlikely...
More than one way to do the same thing.
Don't like the opinions? Forking is free ❤️
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10780945/pasted-from-clipboard.png)
Help is welcome!
Especially examples!
github.com/epicweb-dev/
epic-stack/discussions
kcd.im/discord
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10780961/epic-web.png)
Firm Foundation 🪨
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10451433/one-more-thing.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/10451438/you_re-awesome.gif)
Thank you!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/55780/images/4757667/wave.png)
The Epic Stack
By Kent C. Dodds
The Epic Stack
The Epic Stack is an opinionated project starter that allows teams to ship their ideas to production faster and on a more stable foundation based on the experience of Kent C. Dodds and contributors.
- 3,877