Skip to content

Repository files navigation

Flow Stack Server

A production-ready REST API built with TypeScript, Express 5, Prisma 7, and PostgreSQL using domain-driven modular architecture.

Features

  • JWT dual-token authentication (access + refresh tokens via HttpOnly cookies)
  • Role-based access control (USER, ADMIN)
  • Task management with CRUD operations, filtering, search, and pagination
  • Dashboard analytics with role-specific statistics
  • User management for admin users
  • Input validation with Zod schemas
  • Standardized API responses across all endpoints

Prerequisites

  • Node.js >= 20.x
  • pnpm >= 11.x
  • PostgreSQL database

Environment Variables

Create a .env file in the root directory:

NODE_ENV=developmentDATABASE_URL=your_postgresql_database_urlPORT=8000JWT_ACCESS_SECRET=your-access-token-secretJWT_REFRESH_SECRET=your-refresh-token-secretCLIENT_URL=http://localhost:3000

Variable Descriptions

VariableRequiredDefaultDescription
NODE_ENVNodevelopmentEnvironment mode (development, test, production)
DATABASE_URLYes-PostgreSQL connection string
PORTNo8000Server listening port
JWT_ACCESS_SECRETYes-Secret for signing access tokens
JWT_REFRESH_SECRETYes-Secret for signing refresh tokens
JWT_ACCESS_EXPIRES_INNo15mAccess token expiration
JWT_REFRESH_EXPIRES_INNo7dRefresh token expiration
CLIENT_URLYes-Allowed CORS origin (must be a valid URL)

Getting Started

1. Install Dependencies

pnpm install

2. Set Up Database

# Generate Prisma client
pnpm prisma generate
# Run migrations
pnpm prisma migrate dev
# (Optional) Open Prisma Studio to view data
pnpm prisma studio

3. Start Development Server

pnpm dev

The server will start at http://localhost:8000.

4. Build for Production

pnpm build
pnpm start

Project Structure

flow-stack-server/
├── prisma/
│ ├── schema.prisma # Root schema
│ └── models/ # Split model files
│ ├── user.prisma # User, Account
│ └── task.prisma # Task
├── src/
│ ├── index.ts # Entry point
│ ├── mounted-routes.ts # Route mounting
│ ├── config/ # Environment & Prisma
│ ├── types/ # TypeScript types
│ └── modules/
│ ├── auth/ # Authentication
│ ├── user/ # User management (admin)
│ ├── task/ # Task management
│ ├── dashboard/ # Dashboard & analytics
│ └── shared/ # Shared utilities
├── ENDPOINTS.md # API documentation
├── AGENTS.md # Architecture guide
└── README.md # This file

API Overview

Authentication

MethodEndpointDescription
POST/api/v1/auth/sign-upRegister new user
POST/api/v1/auth/sign-inLogin
POST/api/v1/auth/sign-outLogout
POST/api/v1/auth/refresh-tokenRefresh tokens
GET/api/v1/auth/profileGet profile

Tasks

MethodEndpointDescription
POST/api/v1/tasksCreate task
GET/api/v1/tasksList tasks (filtered)
GET/api/v1/tasks/:idGet task
PATCH/api/v1/tasks/:idUpdate task
PATCH/api/v1/tasks/:id/statusUpdate status
DELETE/api/v1/tasks/:idDelete task

Users (Admin)

MethodEndpointDescription
GET/api/v1/usersList all users
PATCH/api/v1/users/:id/statusToggle user active
DELETE/api/v1/users/:idDelete user

Dashboard

MethodEndpointDescription
GET/api/v1/dashboard/userUser dashboard
GET/api/v1/dashboard/adminAdmin dashboard

For detailed API documentation, see ENDPOINTS.md.

Development

Scripts

pnpm dev # Start dev server with hot reload
pnpm build # Build for production
pnpm start # Start production server

Architecture

This project follows Domain-Driven Modular Architecture with:

  • Controller-Service separation (thin controllers, fat services)
  • Shared module for cross-cutting concerns
  • Zod validation for all inputs
  • Standardized responses across all endpoints

For architecture details, see AGENTS.md.

About

A production-ready REST API built with TypeScript, Express 5, Prisma 7, and PostgreSQL using domain-driven modular architecture.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages