The Ultimate Vibe Coder's Dream Template
Build modern web applications with AI, Payments, and Authentication β all pre-configured and ready to ship.
Quick Start β’ Features β’ Tech Stack β’ Documentation β’ Deployment
Get up and running in seconds with Bun:
# Clone the repository
git clone https://github.com/AaryanBansal-dev/ShipTheVibe.git
cd ShipTheVibe
# Install dependencies with Bun (recommended)
bun install
# Or use npm
npm install
# Set up environment variables
cp .env.example .env.local
# Start the development server
bun run dev
# Or: npm run devOpen http://localhost:3000 to see your app.
- Next.js 15 - Latest React framework with App Router and Server Components
- TypeScript - Full type safety with strict mode enabled
- TailwindCSS v4 - Utility-first CSS for rapid, responsive UI development
- Bun Runtime - Blazing fast JavaScript runtime and package manager
- tRPC - End-to-end typesafe APIs without code generation
- Supabase - Open source Firebase alternative for auth & database
- Zod - TypeScript-first schema validation
- OpenAI API - Ready for ChatGPT and GPT-4 integration
- Gemini API - Google's multimodal AI model support
- Polar API - Modern payment processing for SaaS products
- Docker - Multi-stage Dockerfile with production optimization
- Docker Compose - Development and production configurations
- ESLint - Code quality and consistency
- Jest - JavaScript testing framework
- React Testing Library - Component testing utilities
| Category | Technology | Version |
|---|---|---|
| Framework | Next.js | 15 |
| Runtime | React | 19 |
| Language | TypeScript | 5 |
| Styling | TailwindCSS | 4 |
| Package Manager | Bun | 1.0+ |
| Database | Supabase | 2 |
| API Layer | tRPC | 11 |
| Validation | Zod | 3 |
| Testing | Jest | 29 |
/ShipTheVibe
βββ /public # Static assets
βββ /src
β βββ /app # Next.js App Router pages
β β βββ globals.css # Global styles & animations
β β βββ layout.tsx # Root layout
β β βββ page.tsx # Homepage
β βββ /components # Reusable React components
β β βββ Alert.tsx # Alert notifications
β β βββ Avatar.tsx # User avatars
β β βββ Badge.tsx # Status badges
β β βββ Button.tsx # Buttons with variants
β β βββ Card.tsx # Card containers
β β βββ Input.tsx # Form inputs
β β βββ Loading.tsx # Loading spinners
β β βββ Modal.tsx # Modal dialogs
β β βββ index.ts # Component exports
β βββ /hooks # Custom React hooks
β β βββ index.ts # useLocalStorage, useDebounce, etc.
β βββ /lib # Library configurations
β β βββ supabaseClient.ts
β βββ /api # tRPC configurations
β β βββ trpc.ts
β βββ /pages/api # API routes
β β βββ users.ts
β βββ /utils # Utility functions
β β βββ helpers.ts # cn, formatDate, tryCatch, etc.
β βββ /types # TypeScript definitions
β βββ index.ts
βββ /tests # Test files
βββ .env.example # Environment template
βββ Dockerfile # Multi-stage Docker config
βββ docker-compose.yml # Docker Compose config
βββ bun.lockb # Bun lock file
βββ package.json # Dependencies
βββ tailwind.config.js # Tailwind configuration
βββ tsconfig.json # TypeScript configuration
βββ jest.config.mjs # Jest configuration
import { Button } from '@/components';
<Button
label="Click me"
onClick={() => {}}
variant="primary" // primary | secondary | outline | ghost | danger
size="md" // sm | md | lg
loading={false}
/>import { Card } from '@/components';
<Card hover className="p-4">
<h3>Card Title</h3>
<p>Card content</p>
</Card>import { Input } from '@/components';
<Input
label="Email"
placeholder="Enter your email"
error="Invalid email"
helperText="We'll never share your email"
/>import { Modal } from '@/components';
<Modal
isOpen={isOpen}
onClose={() => setIsOpen(false)}
title="Modal Title"
size="md" // sm | md | lg | xl
>
<p>Modal content</p>
</Modal>import { Alert, Badge, Avatar, Loading } from '@/components';
<Alert variant="success" title="Success">Operation completed!</Alert>
<Badge variant="info">New</Badge>
<Avatar src="/avatar.jpg" fallback="JD" size="lg" />
<Loading size="md" text="Loading..." />const [value, setValue] = useLocalStorage<string>('key', 'defaultValue');const debouncedValue = useDebounce(searchTerm, 500);const isMobile = useMediaQuery('(max-width: 768px)');const [isOpen, toggle, setIsOpen] = useToggle(false);const ref = useClickOutside<HTMLDivElement>(() => setIsOpen(false));const [copied, copyToClipboard] = useClipboard();
await copyToClipboard('Text to copy');const { width, height } = useWindowSize();import { cn } from '@/utils/helpers';
const className = cn('base-class', isActive && 'active', customClass);formatDate(new Date()); // "December 31, 2024"formatCurrency(29.99, 'USD'); // "$29.99"const [data, error] = await tryCatch(fetchData());generateId()- Generate unique IDssleep(ms)- Delay executiontruncate(text, maxLength)- Truncate textcapitalize(text)- Capitalize first letterdeepClone(obj)- Deep clone objectsisEmpty(value)- Check if value is empty
Copy .env.example to .env.local and configure:
# Supabase Configuration
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url_here
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key_here
# OpenAI API Configuration
OPENAI_API_KEY=your_openai_api_key_here
# Gemini API Configuration
GEMINI_API_KEY=your_gemini_api_key_here
# Polar API Configuration (Payment Processing)
POLAR_API_KEY=your_polar_api_key_here| Command | Description |
|---|---|
bun run dev |
Start development server |
bun run build |
Build for production |
bun run start |
Start production server |
bun run lint |
Run ESLint |
bun run test |
Run tests |
bun run test:watch |
Run tests in watch mode |
π‘ All commands also work with
npm runinstead ofbun run
docker-compose updocker-compose --profile production up app-proddocker build -t ship-the-vibe .
docker run -p 3000:3000 ship-the-vibe- Push your code to GitHub
- Connect your repository to Vercel
- Configure environment variables in Vercel dashboard
- Deploy automatically on every push
Deploy to any cloud provider that supports Docker:
- AWS ECS / Fargate
- Google Cloud Run
- Azure Container Apps
- DigitalOcean App Platform
- Railway
- Fly.io
# Run all tests
bun run test
# Run tests in watch mode
bun run test:watch
# Run with coverage
bun run test --coverage// src/lib/supabaseClient.ts
import { createClient } from '@supabase/supabase-js';
export const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
);// src/api/trpc.ts
import { initTRPC } from '@trpc/server';
import { z } from 'zod';
const t = initTRPC.create();
export const appRouter = t.router({
getUser: t.procedure
.input(z.string())
.query((opts) => {
return { id: opts.input };
}),
});
export type AppRouter = typeof appRouter;- Fully functional Next.js 15 application with TypeScript
- Modern TailwindCSS v4 with custom animations
- Supabase client for authentication and database
- tRPC setup for type-safe API communication
- Multi-stage Docker configuration for dev and production
- Comprehensive UI component library
- Custom hooks collection
- Utility functions
- Type definitions for common data structures
- Bun as primary package manager
- Jest testing setup with React Testing Library
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
MIT License - see the LICENSE file for details.
Built with π by Aaryan Bansal
Happy Shipping! π