A full-stack application built with TanStack ecosystem, Tailwind CSS, and Appwrite.
- TanStack Start — Full-stack React framework (SSR, routing, and server functions)
- TanStack Router — Type-safe routing and navigation
- TanStack Query — Server state management, caching, and data fetching
- TanStack Table — Headless tables for sorting, filtering, and pagination
- Tailwind CSS — Utility-first CSS
- Appwrite — Backend (Databases) for users, sessions, magic links, and listings
- Node.js v20.19+ or v22.12+ (required by Vite 7). If you see a version warning, upgrade Node (e.g. nvm:
nvm installthennvm use, or fnm, or nodejs.org). - Appwrite (cloud or self-hosted)
- pnpm (recommended) or npm
# Install dependencies
pnpm install
# Run development server
pnpm devOpen http://localhost:3000.
Create a .env in the project root (see docs/APPWRITE.md for Appwrite setup):
| Variable | Description |
|---|---|
APPWRITE_ENDPOINT |
Appwrite API endpoint (default: cloud URL) |
APPWRITE_PROJECT_ID |
Your Appwrite project ID |
APPWRITE_API_KEY |
Server API key with Databases read/write |
APPWRITE_DATABASE_ID |
Database ID (default: whatisell) |
whatisell/
├── src/
│ ├── routes/ # TanStack Router file-based routes
│ │ ├── __root.tsx # Root layout (mobile-first)
│ │ ├── index.tsx # Landing page
│ │ ├── signup.tsx # Sign up (7-day trial)
│ │ ├── login.tsx # Log in (password or magic link)
│ │ ├── login/magic.tsx # Magic link handler
│ │ ├── listings.tsx # Listings layout
│ │ ├── listings/index.tsx # Today's listings
│ │ └── post/new.tsx # Post a listing
│ ├── server/ # Backend (Appwrite, auth)
│ ├── lib/cookie.ts # Session cookie helpers
│ ├── styles/app.css # Tailwind
│ ├── types.ts
│ ├── router.tsx
│ └── routeTree.gen.ts
├── docs/APPWRITE.md # Appwrite database setup
├── docs/AUTH.md # Session, current user, redirect (single pattern)
├── vite.config.ts
└── package.json
- Landing — Hero with "Start trial for 7 days", Log in, Sign up.
- Sign up — Email, password, optional name; 7-day trial start.
- Log in — Password or one-time magic link (link shown in dev; in production send by email).
- Mobile-first — Touch-friendly UI; viewport and safe areas.
- Appwrite — Users, sessions, magic links, and listings stored in Appwrite Databases (see docs/APPWRITE.md).
- Auth — Cookie session; one
getCurrentUserFnand full-page redirect after login (see docs/AUTH.md).
MIT