Documentation
Documentation
Introduction

Getting Started

Getting StartedInstallationQuick StartProject Structure

Architecture

Architecture OverviewTech StacktRPC MiddlewareDesign Principles

Patterns

Code Patterns & ConventionsFeature ModulesError HandlingType Safety

Database

DatabaseSchema DefinitionDatabase OperationsMigrationsCaching

API

tRPCProceduresRouterstRPC Proxy Setup
APIsOpenAPIREST Endpoints

Auth & Access

AuthenticationConfigurationOAuth ProvidersRolesSession Management
AuthorizationUser RolesPermissions

Routing & i18n

RoutingDeclarative RoutingNavigation
InternationalizationTranslationsLocale Routing

Components & UI

ComponentsButtonsFormsNavigationDialogs
StylesTailwind CSSThemingTypography

Storage

StorageConfigurationUsageBuckets

Configuration

ConfigurationEnvironment VariablesFeature Flags

Templates

Template GuidesCreate New FeatureCreate New PageCreate Database TableCreate tRPC RouterAdd Translations

Development

DevelopmentCommandsAI AgentsBest Practices

Components

UI components and patterns

This project uses Shadcn UI built on top of Tailwind CSS for a consistent, accessible component library.

Component Organization

Shared components are located in src/components/:

DirectoryPurpose
src/components/uiBase Shadcn components (Button, Input)
src/components/navigationLayout components, headers, breadcrumbs
src/components/extExtended/custom components

Quick Links

Buttons

Button and ButtonLink components with variants

Forms

React Hook Form + Zod validation patterns

Dialogs

usePrompt() pattern for modals and confirmations

Navigation

Header, sidebar, and navigation components

Icons

Always use the <Icon /> component instead of importing directly from Lucide.

import { Icon } from "@/lib/icons";

<Icon iconKey="user" className="text-primary" />
<Icon iconKey="spinner" />  {/* Automatically animates */}

Benefits

  • Extended sources - Access Lucide, social, payment, and custom SVG icons
  • Consistent styling - Auto-applies strokeWidth={2} and size-4 shrink-0
  • Auto-animation - Spinner icon automatically spins

Icon Modules

ModuleDescription
lucide.tsCore application icons from Lucide
social.tsxSocial media SVG icons
payment.tsxPayment provider icons
custom.tsxCustom SVG icons (borders, etc.)

Never Import Directly

Avoid importing from lucide-react directly. Always use the Icon component for consistency.

Placeholder Images

For development and prototyping:

// External placeholder (dynamic sizes)
<Image src="https://placehold.co/400x400" alt="" />

// Local placeholder
<Image src="/assets/placeholder.jpg" alt="" />
SourceUse Case
https://placehold.co/WxHDynamic sizing
/assets/placeholder.jpgLocal fallback, faster

Next Steps

Explore specific component documentation to learn about variants, props, and usage patterns

On this page

Component Organization
Quick Links
Icons
Benefits
Icon Modules
Placeholder Images
Next Steps