From 640f321361056d23b58a3a026e15fe241bb8427f Mon Sep 17 00:00:00 2001 From: kegren Date: Sat, 7 Feb 2026 16:06:25 +0100 Subject: [PATCH] feat(content): update app description and readme --- README.md | 153 +++++++++---------------------------------- src/routes/index.tsx | 32 ++++----- 2 files changed, 46 insertions(+), 139 deletions(-) diff --git a/README.md b/README.md index a7ca3db..2e37a13 100644 --- a/README.md +++ b/README.md @@ -1,150 +1,57 @@ -# 🏝️ tano-stack +# tano-stack -My personal full-stack starter I put together after trying out a bunch of different stacks. It's got everything I need for most projects without being overly complicated. +My personal starter for building web apps with the stack I actually use. +Not trying to be everything for everyone, just a solid setup that saves me from redoing the same plumbing every weekend. -## What's Inside +## Tech Stack -- **⚡ TanStack Start** — File-based routing, server functions, and SSR that just work -- **🔐 Better Auth** — Rock-solid authentication with email verification and social logins -- **🗃️ Drizzle + PostgreSQL + TanStack DB** — Type-safe queries, effortless migrations, connection pooling -- **📧 React Email + useSend** — Transactional emails that look professional and send reliably -- **🎨 shadcn/ui** — Beautiful, accessible components that feel custom-built -- **⚙️ pg-boss** — Background jobs using your existing Postgres database -- **🛡️ Cloudflare Turnstile** — Bot protection that doesn't annoy real users -- **🌓 Dark/Light Mode** — Seamless theme switching built-in -- **🔧 Bun + Vite** — Development that's actually fast and enjoyable +- TanStack Start (React, SSR, file-based routing) +- Better Auth (email + social login) +- Drizzle ORM + PostgreSQL +- TanStack Query + TanStack DB +- Tailwind CSS v4 + shadcn/ui +- pg-boss (background jobs) +- React Email + useSend +- Bun + Vite ## CI/CD [![CI](https://github.com/kegren/tano-stack/actions/workflows/ci.yml/badge.svg)](https://github.com/kegren/tano-stack/actions/workflows/ci.yml) -Automated quality checks run on every commit: -- **Linting** — Code style and logic checks with Ultracite -- **Testing** — Unit tests with Vitest -- **Build** — Production build verification +GitHub Actions runs on pushes to `main` and on PRs: -## Modern Features +- lint (`bun lint`) +- tests (`bun test`) +- build (`bun run build`) -- **🎨 Dark/Light Mode** — Theme switching with `better-themes` and CSS variables -- **⚡ Optimistic Updates** — Instant UI feedback with TanStack DB's mutation features -- **🏊 Connection Pooling** — Efficient PostgreSQL connection management with `postgres.js` -- **📊 Type-Safe Everything** — TanStack Query provides additional type safety on top of Drizzle -- **🔄 Background Processing** — Email sending and async tasks with `pg-boss` -- **🛡️ Security First** — Rate limiting, CAPTCHA, CSRF protection, and secure sessions -- **📱 Mobile-First UI** — Responsive design with Tailwind CSS and shadcn/ui -- **🔑 Social Auth** — Email + Google/GitHub sign in with Better Auth -- **🚀 Production Ready** — Built-in error boundaries, loading states, and performance optimizations +If something breaks, CI yells first so production does not have to. + +## Features + +- Auth flows ready to go (email verification + social) +- Type-safe DB setup with Drizzle migrations +- Web + worker split for background processing +- Turnstile support for bot protection +- Dark/light theme toggle +- Production build + test setup out of the box ## Quick Start ```bash -# Get the code git clone https://github.com/kegren/tano-stack cd tano-stack - -# Install everything bun install - -# Set up your environment cp .env.example .env -# Add your database URL, auth secrets, and API keys - -# Push schema to database bun db:push - -# Start building bun dev ``` -Visit [http://localhost:3000](http://localhost:3000) and you'll have a full-stack app running with auth, database, and email ready to go. +Then open `http://localhost:3000`. -## Deploy to Railway - -This template is designed for Railway with two services: a web app and a background worker. - -### Prerequisites -- [Railway account](https://railway.app) -- PostgreSQL database (Railway provides this) - -### 1. Database Setup -Create a PostgreSQL database in Railway and copy the `DATABASE_URL`. - -### 2. Deploy Web Service -```bash -# Fork this repo and connect to Railway -# Set these environment variables: -DATABASE_URL=postgresql://... -BETTER_AUTH_SECRET=your-secret-here -GITHUB_CLIENT_ID=your-github-client-id -GITHUB_CLIENT_SECRET=your-github-client-secret -GOOGLE_CLIENT_ID=your-google-client-id -GOOGLE_CLIENT_SECRET=your-google-client-secret -TURNSTILE_SITE_KEY=your-turnstile-site-key -TURNSTILE_SECRET_KEY=your-turnstile-secret-key -USE_SEND_API_KEY=your-usesend-api-key - -# Railway will auto-detect and deploy using: -# Build command: bun run build -# Start command: bun run start -``` - -### 3. Deploy Background Worker -Create a second service in Railway with the same repo but different start command: - -```bash -# In Railway service settings: -# Build command: bun run build -# Start command: bun run worker:start -``` - -### Architecture -- **Web Service**: Handles HTTP requests, auth, and UI -- **Worker Service**: Processes background jobs (email sending, etc.) -- **Database**: Shared PostgreSQL instance - -### Environment Variables -Both services need the same `DATABASE_URL`. The web service needs all auth/API keys, while the worker only needs database access. - -Railway's free tier works great for getting started! - -## Project Structure - -``` -src/ -├── features/ # Feature modules (auth, todos, etc.) -├── components/ # Shared UI components -├── routes/ # File-based routing with TanStack Router -├── lib/ # Utilities, auth config, email setup -├── db/ # Database schema and migrations -└── worker/ # Background job processing -``` +## PRs (Welcomed) -## Commands - -| Command | Description | -|---------|-------------| -| `bun dev` | Start dev server + background worker | -| `bun dev:web` | Dev server only (port 3000) | -| `bun dev:worker` | Background worker only | -| `bun build` | Production build | -| `bun serve` | Preview production build | -| `bun start` | Start production server | -| `bun worker:start` | Start background worker | -| `bun test` | Run test suite | -| `bun typecheck` | TypeScript type checking | -| `bun lint` | Code linting | -| `bun lint:fix` | Auto-fix linting issues | -| `bun db:generate` | Generate Drizzle migrations | -| `bun db:migrate` | Run pending migrations | -| `bun db:push` | Push schema changes directly | -| `bun db:pull` | Pull schema from database | -| `bun db:studio` | Open Drizzle Studio GUI | -| `better-auth:generate` | Update auth schema | -| `better-auth:secret` | Generate new auth secret | - -## Contributing - -Love that you're interested! This started as my personal toolkit, but I'm excited to see how others use and improve it. PRs welcome. +If you spot something weird, clunky, or just mildly annoying, PRs are very welcome. +Small fixes, big improvements, and opinionated tweaks all appreciated. ## License diff --git a/src/routes/index.tsx b/src/routes/index.tsx index 302aa5f..19705b3 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -19,12 +19,12 @@ function App() { {/* Hero Content */}

- Build modern web apps -
faster with tano-stack + tano-stack +
my go-to web app starter

- A full-stack starter I built after testing different approaches. Practical, type-safe, and not over-engineered. + Built so I can stop wiring auth, DB, and jobs from scratch every time I start a new idea.

@@ -73,42 +73,42 @@ function App() {
🌓

Dark/Light Mode

-

Seamless theme switching with better-themes

+

Theme toggle included, no extra setup rabbit hole

-

Optimistic Updates

-

Instant UI feedback with TanStack DB

+

Fast UI by Default

+

Optimistic updates so the app feels snappy

🔄

Background Jobs

-

Email sending & async tasks with pg-boss

+

Emails and async work handled by a worker process

🏊
-

Connection Pooling

-

Efficient PostgreSQL connection management

+

Database Ready

+

Postgres + pooling already wired up

📊

Type-Safe Database

-

Drizzle ORM + TanStack Query for full type safety

+

Drizzle and TanStack tools keep types honest

🔐
-

Secure by Default

-

Rate limiting, CAPTCHA, and session security

+

Auth That Ships

+

Email + social auth with the safety bits in place

-

CI/CD Ready

-

Automated testing, linting, and build checks

+

CI Included

+

Lint, test, and build checks on pushes and PRs

🔑

Social Auth

-

Email + Google/GitHub sign in ready

+

Google/GitHub sign-in ready when you need it

@@ -136,7 +136,7 @@ function App() { rel="noopener noreferrer" target="_blank" > - View on GitHub + Curious? Peek at the repo