feat: turbostarter boilerplate

Production-ready Next.js boilerplate with:
- Runtime env validation (fail-fast on missing vars)
- Feature-gated config (S3, Stripe, email, OAuth)
- Docker + Coolify deployment pipeline
- PostgreSQL + pgvector, MinIO S3, Better Auth
- TypeScript strict mode (no ignoreBuildErrors)
- i18n (en/es), AI modules, billing, monitoring

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Alejandro Gutiérrez
2026-02-02 17:29:12 +00:00
commit 3527e732d4
1618 changed files with 338230 additions and 0 deletions

View File

@@ -0,0 +1,392 @@
import {
Activity,
AlertCircle,
AlertTriangle,
ArrowRight,
AtSign,
LogIn,
UserRound,
SunMoon,
Moon,
Sun,
Undo2,
Check,
Loader,
Loader2,
CircleX,
CheckCircle2,
Gift,
X,
CheckIcon,
ArrowUp,
Globe2,
GraduationCap,
Atom,
Brain,
LogOut,
Settings,
Home,
Star,
CreditCard,
EllipsisVertical,
User2,
LifeBuoy,
MessageCircle,
MessageSquare,
MessageSquarePlus,
Plus,
Trash,
Ellipsis,
ClockFading,
BadgeCheck,
BadgeX,
ArrowUpRight,
Menu,
MonitorSmartphone,
Key,
TrendingUp,
TrendingDown,
PaintBucket,
ChartNoAxesGantt,
BookOpen,
Webhook,
Download,
ChevronRight,
SendHorizontal,
Copy,
ChevronsUpDown,
ArrowDown,
ArrowLeft,
UserRoundPlus,
UsersRound,
Search,
Filter,
ChevronsLeft,
ChevronLeft,
ChevronsRight,
Settings2,
ChevronDown,
EyeOff,
ChevronUp,
XCircle,
MailPlus,
PlusCircle,
Calendar,
ShieldUser,
Building,
HandCoins,
Code,
VenetianMask,
Ban,
Eye,
Lock,
Slash,
MoreHorizontal,
MoreVertical,
Circle,
Minus,
PanelLeft,
Database,
Snowflake,
Cloud,
Crown,
Target,
Megaphone,
Package,
Headphones,
Info,
Bell,
Share2,
LayoutDashboard,
Pencil,
BarChart3,
// AI module icons
ImagePlus,
Image,
Globe,
Sparkle,
Sparkles,
Square,
SquarePen,
TextSearch,
MessagesSquare,
ExternalLink,
FileText,
ChartNoAxesColumn,
Zap,
PackageOpen,
Paperclip,
AudioLines,
AudioWaveform,
Undo,
Pause,
Play,
Redo,
BanknoteX,
ClockAlert,
RotateCcw,
RotateCw,
ThumbsUp,
ThumbsDown,
// Additional AI module icons
Shrub,
Lightbulb,
Puzzle,
Smile,
RefreshCcw,
LibraryBig,
BadgeDollarSign,
Newspaper,
RectangleHorizontal,
RectangleVertical,
ImagePlay,
ImageOff,
Send,
FileUp,
FileX,
DownloadCloud,
Link,
ScrollText,
Mic,
MicOff,
} from "lucide-react";
import { Icons as GlobalIcons } from "@turbostarter/ui/assets";
import type { FC, SVGProps } from "react";
// AI Provider Icons
const createProviderIcon = (paths: string[], viewBox = "0 0 24 24"): FC<SVGProps<SVGSVGElement>> => {
const Component: FC<SVGProps<SVGSVGElement>> = (props) => (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox={viewBox}
fill="currentColor"
{...props}
>
{paths.map((d, i) => (
<path key={i} d={d} />
))}
</svg>
);
return Component;
};
const OpenAI = createProviderIcon([
"M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .51 4.911 6.051 6.051 0 0 0 6.515 2.9A5.985 5.985 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.99 5.99 0 0 0 3.997-2.9 6.056 6.056 0 0 0-.747-7.073zM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.141-.081 4.779-2.758a.795.795 0 0 0 .392-.681v-6.737l2.02 1.168a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494zM3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085 4.783 2.759a.771.771 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646zM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.677l5.815 3.355-2.02 1.168a.076.076 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.896zm16.597 3.855l-5.833-3.387L15.119 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667zm2.01-3.023l-.141-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135l-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08L8.704 5.46a.795.795 0 0 0-.393.681zm1.097-2.365l2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.607-1.5z",
]);
const Gemini = createProviderIcon([
"M12 0C5.372 0 0 5.373 0 12s5.372 12 12 12 12-5.373 12-12S18.628 0 12 0zm5.568 14.163c-.169.288-.456.457-.781.457H7.213c-.325 0-.612-.169-.781-.457L4.194 12l2.238-2.163c.169-.288.456-.456.781-.456h9.574c.325 0 .612.168.781.456L19.806 12l-2.238 2.163z",
]);
const Claude = createProviderIcon([
"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 15.5v-4.38l-3.5 2.19-.75-1.23L10.5 12l-3.75-2.08.75-1.23L11 10.88V6.5h1.5v4.38l3.5-2.19.75 1.23L13 12l3.75 2.08-.75 1.23-3.5-2.19V17.5H11z",
]);
const Grok = createProviderIcon([
"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z",
]);
const DeepSeek = createProviderIcon([
"M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8zm4-9h-3V8a1 1 0 0 0-2 0v3H8a1 1 0 0 0 0 2h3v3a1 1 0 0 0 2 0v-3h3a1 1 0 0 0 0-2z",
]);
const Replicate = createProviderIcon([
"M4.5 2.5a2 2 0 0 0-2 2v15a2 2 0 0 0 2 2h15a2 2 0 0 0 2-2v-15a2 2 0 0 0-2-2h-15zm2 5h11v2h-11v-2zm0 4h11v2h-11v-2zm0 4h7v2h-7v-2z",
]);
const Luma = createProviderIcon([
"M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5",
]);
const StabilityAI = createProviderIcon([
"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-5-9h10v2H7z",
]);
const Recraft = createProviderIcon([
"M20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.996.996 0 0 0-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83zM3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM5.92 19H5v-.92l9.06-9.06.92.92L5.92 19z",
]);
const ElevenLabs = createProviderIcon([
"M9 2v20M15 2v20",
]);
const Nvidia = createProviderIcon([
"M11.06 8.84c-.6-.3-1.33-.4-2.06-.4-1.91 0-3.47.8-4.3 2.23l-.72-.42c.95-1.66 2.83-2.64 5.02-2.64.87 0 1.72.13 2.46.5l-.4.73zm7.56-3.12c-1.5-1.17-3.57-1.72-5.76-1.72-2.95 0-5.5 1.01-7.05 2.72-.98 1.08-1.59 2.4-1.81 3.87l.82.15c.2-1.32.73-2.5 1.59-3.45 1.4-1.55 3.7-2.45 6.45-2.45 2.02 0 3.9.51 5.24 1.54l.52-.66zM12 22c5.52 0 10-4.48 10-10S17.52 2 12 2 2 6.48 2 12s4.48 10 10 10z",
]);
export const Icons = {
...GlobalIcons,
Minus,
PanelLeft,
Eye,
Slash,
Code,
VenetianMask,
Lock,
MailPlus,
ClockFading,
Calendar,
ArrowRight,
LogIn,
UserRound,
Key,
SunMoon,
ChevronRight,
Moon,
Sun,
Undo2,
Check,
Loader2,
CircleX,
Ban,
CheckCircle2,
CheckIcon,
Gift,
X,
ArrowUp,
Globe2,
GraduationCap,
ChartNoAxesGantt,
BookOpen,
Webhook,
Star,
Atom,
Brain,
LogOut,
Settings,
Home,
CreditCard,
User2,
EllipsisVertical,
LifeBuoy,
MessageCircle,
Plus,
Loader,
Ellipsis,
Trash,
BadgeCheck,
BadgeX,
ArrowUpRight,
Menu,
MonitorSmartphone,
Download,
Copy,
PaintBucket,
SendHorizontal,
ChevronsUpDown,
ArrowDown,
ArrowLeft,
UsersRound,
UserRoundPlus,
Search,
Filter,
ChevronsLeft,
ChevronLeft,
ChevronsRight,
Settings2,
ChevronDown,
EyeOff,
ChevronUp,
XCircle,
PlusCircle,
ShieldUser,
Building,
HandCoins,
TrendingUp,
MoreHorizontal,
MoreVertical,
Circle,
BarChart3,
BarChart: BarChart3,
Pencil,
Clock: ClockFading,
Database,
Snowflake,
Cloud,
Crown,
Target,
Megaphone,
Package,
Headphones,
TrendingDown,
AlertTriangle,
AlertCircle,
Info,
Bell,
Share: Share2,
Activity,
AtSign,
MessageSquare,
MessageSquarePlus,
LayoutDashboard,
Edit: Pencil,
// AI module icons
ImagePlus,
Globe,
Sparkle,
Sparkles,
Square,
SquarePen,
TextSearch,
MessagesSquare,
ExternalLink,
FileText,
ChartNoAxesColumn,
Zap,
PackageOpen,
Paperclip,
AudioLines,
AudioWaveform,
Undo,
Pause,
Play,
Redo,
BanknoteX,
ClockAlert,
RotateCcw,
RotateCw,
Image,
ThumbsUp,
ThumbsDown,
// Additional AI module icons
Shrub,
Lightbulb,
Puzzle,
Smile,
RefreshCcw,
LibraryBig,
BadgeDollarSign,
Newspaper,
RectangleHorizontal,
RectangleVertical,
ImagePlay,
ImageOff,
Send,
FileUp,
FileUpIcon: FileUp,
FileX,
DownloadCloud,
Link,
ScrollText,
Mic,
MicOff,
MinusIcon: Minus,
PlusIcon: Plus,
// AI provider icons
OpenAI,
Gemini,
Claude,
Grok,
DeepSeek,
Replicate,
Luma,
StabilityAI,
Recraft,
ElevenLabs,
Nvidia,
};
export type Icon = (typeof Icons)[keyof typeof Icons];