Blueprint — TaskFlow Pro
SaaS de gestión de tareas · Next.js + Supabase · Solo dev · 8 semanas
Blueprint de Desarrollo — TaskFlow Pro
1. Resumen Ejecutivo
TaskFlow Pro es una herramienta SaaS de gestión de tareas para equipos remotos de hasta 20 personas. El objetivo es llegar a un MVP funcional en 8 semanas con un presupuesto de infraestructura de $20-50/mes.
Stack recomendado: Next.js 14 + Supabase + Vercel
Este stack fue elegido porque permite un desarrollo rápido con un solo desarrollador, incluye autenticación lista para usar, base de datos PostgreSQL con tiempo real, y escala desde $0 hasta miles de usuarios sin cambiar de proveedor.
2. Stack Tecnológico
| Capa | Tecnología | Justificación |
|---|---|---|
| Frontend | Next.js 14 (App Router) | SSR + RSC + DX excelente |
| Base de datos | Supabase PostgreSQL | Auth + realtime + storage incluidos |
| Autenticación | Supabase Auth | Email, Google, GitHub en minutos |
| Hosting | Vercel | Deploy automático desde GitHub, CDN global |
| Resend | Transaccional moderno, gratis hasta 3000/mes | |
| Pagos | Lemon Squeezy | SaaS-first, sin necesidad de LLC |
| Estilos | Tailwind CSS + shadcn/ui | Productividad máxima |
| Tipado | TypeScript | Seguridad de tipos end-to-end |
3. Arquitectura del Sistema
┌─────────────────────────┐
│ Usuario (Browser) │
└───────────┬─────────────┘
│ HTTPS
┌───────────▼─────────────┐
│ Vercel Edge Network │
│ (CDN + Serverless) │
└───────────┬─────────────┘
│
┌─────────────────┼─────────────────┐
│ │ │
┌──────────▼──────┐ ┌───────▼──────┐ ┌───────▼──────┐
│ Next.js App │ │ API Routes │ │ Static │
│ (RSC + SSR) │ │ /api/* │ │ Assets │
└──────────┬──────┘ └───────┬──────┘ └──────────────┘
│ │
┌──────────▼────────────────▼──────┐
│ Supabase │
│ ┌──────────┐ ┌──────────────┐ │
│ │ Auth │ │ PostgreSQL │ │
│ └──────────┘ └──────────────┘ │
│ ┌──────────┐ ┌──────────────┐ │
│ │ Realtime │ │ Storage │ │
│ └──────────┘ └──────────────┘ │
└──────────────────────────────────┘Flujo de datos:
1. Usuario hace request → Vercel Edge recibe
2. Next.js server components renderizan con datos de Supabase
3. Client components se hidratan en el browser
4. Realtime subscriptions mantienen el estado sincronizado entre usuarios
4. Estructura de Carpetas
taskflow-pro/
├── app/
│ ├── (auth)/
│ │ ├── login/page.tsx
│ │ ├── register/page.tsx
│ │ └── layout.tsx
│ ├── (dashboard)/
│ │ ├── dashboard/page.tsx
│ │ ├── projects/
│ │ │ ├── page.tsx
│ │ │ └── [id]/page.tsx
│ │ ├── tasks/page.tsx
│ │ ├── team/page.tsx
│ │ └── layout.tsx
│ ├── api/
│ │ ├── projects/route.ts
│ │ ├── tasks/route.ts
│ │ └── webhooks/lemon/route.ts
│ ├── layout.tsx
│ └── page.tsx
├── components/
│ ├── ui/ ← shadcn/ui components
│ ├── tasks/
│ │ ├── TaskCard.tsx
│ │ ├── TaskBoard.tsx
│ │ └── TaskForm.tsx
│ ├── projects/
│ │ ├── ProjectCard.tsx
│ │ └── ProjectSidebar.tsx
│ └── shared/
│ ├── Navbar.tsx
│ └── UserAvatar.tsx
├── lib/
│ ├── supabase/
│ │ ├── client.ts ← browser client
│ │ └── server.ts ← server client
│ ├── utils.ts
│ └── validations.ts
├── types/
│ └── database.ts ← tipos generados por Supabase
├── middleware.ts ← protección de rutas
└── supabase/
└── migrations/ ← SQL migrations5. Esquema de Base de Datos
-- Equipos / Organizations
create table teams (
id uuid primary key default gen_random_uuid(),
name text not null,
slug text unique not null,
plan text default 'free', -- free | pro | enterprise
created_at timestamptz default now()
);
-- Miembros del equipo
create table team_members (
id uuid primary key default gen_random_uuid(),
team_id uuid references teams(id) on delete cascade,
user_id uuid references auth.users(id) on delete cascade,
role text default 'member', -- owner | admin | member
joined_at timestamptz default now(),
unique(team_id, user_id)
);
-- Proyectos
create table projects (
id uuid primary key default gen_random_uuid(),
team_id uuid references teams(id) on delete cascade,
name text not null,
description text,
status text default 'active', -- active | archived | completed
color text default '#3b82f6',
created_at timestamptz default now()
);
-- Tareas
create table tasks (
id uuid primary key default gen_random_uuid(),
project_id uuid references projects(id) on delete cascade,
assigned_to uuid references auth.users(id),
title text not null,
description text,
status text default 'todo', -- todo | in_progress | review | done
priority text default 'medium', -- low | medium | high | urgent
due_date date,
created_at timestamptz default now(),
updated_at timestamptz default now()
);
-- RLS Policies (Row Level Security)
alter table projects enable row level security;
create policy "Team members can view projects"
on projects for select
using (team_id in (
select team_id from team_members where user_id = auth.uid()
));6. Plan de Desarrollo — Semana a Semana
Semana 1 — Setup y Auth
- Inicializar proyecto Next.js 14 con TypeScript y Tailwind
- Configurar Supabase (proyecto, variables de entorno)
- Implementar login/register con Supabase Auth (email + Google)
- Middleware para protección de rutas
- Layout del dashboard vacío
Semana 2 — Core: Proyectos
- CRUD de proyectos (crear, listar, archivar)
- Invitar miembros al equipo por email
- Roles: owner, admin, member
- Row Level Security en Supabase
Semana 3 — Core: Tareas
- CRUD de tareas con estados (Todo → In Progress → Review → Done)
- Asignar tareas a miembros
- Prioridad y fecha de vencimiento
- Vista board (kanban) y lista
Semana 4 — Tiempo real
- Supabase Realtime para sincronización de tareas
- Notificaciones en tiempo real cuando asignan una tarea
- Indicador de "online" para miembros activos
Semana 5 — Pagos
- Integrar Lemon Squeezy para plan Pro ($12/mes)
- Webhook para activar plan tras pago
- Límites del plan free (3 proyectos, 10 tareas)
- Página de billing
Semana 6 — Email y notificaciones
- Resend para emails transaccionales
- Notificación cuando se asigna una tarea
- Digest semanal de tareas pendientes
- Email de bienvenida al registrarse
Semana 7 — Pulir UX
- Loading states y skeletons
- Manejo de errores
- Mobile responsive
- Búsqueda de tareas
Semana 8 — Deploy y lanzamiento
- Dominio personalizado en Vercel
- Variables de entorno de producción
- Tests básicos de flujo crítico
- Lanzamiento en ProductHunt / Twitter
7. Prompts Listos para IA
Prompt 1 — Setup inicial
Soy un dev senior. Configurá un proyecto Next.js 14 con TypeScript, Tailwind CSS y Supabase. Incluí: - /app/layout.tsx con ThemeProvider - Supabase client para browser (lib/supabase/client.ts) y server (lib/supabase/server.ts) - middleware.ts que protege /dashboard/* y redirige a /login si no hay sesión - Variables de entorno en .env.local: NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY Usá el patrón oficial de Supabase para Next.js App Router con cookies.
Prompt 2 — CRUD de tareas
Con Supabase + Next.js App Router, creá un componente TaskBoard.tsx que:
- Muestre tareas agrupadas por status (todo, in_progress, review, done)
- Permita drag & drop entre columnas (usá @hello-pangea/dnd)
- Al mover una tarjeta llame a Supabase para actualizar el status
- Suscriba a cambios en tiempo real con supabase.channel().on('postgres_changes')
- Optimistic update: actualice el UI antes de confirmar con el servidorPrompt 3 — Auth con Google
Implementá login con Google OAuth en Supabase + Next.js 14:
- Botón "Continuar con Google" en /login/page.tsx
- Handler en /auth/callback/route.ts que intercambia el code por session
- Después del login, crea automáticamente un team para el usuario si no tiene uno
- Redirigir a /dashboard
Usá supabase.auth.signInWithOAuth({ provider: 'google', options: { redirectTo } })Prompt 4 — Webhook Lemon Squeezy
Creá /api/webhooks/lemon/route.ts que: - Verifique la firma del webhook con HMAC SHA256 - Si event_type === 'order_created', active el plan pro del team en Supabase - Actualice teams SET plan = 'pro' WHERE id = metadata.team_id - Retorne 200 OK si todo salió bien, 400 si falló la verificación Incluí el secret key desde process.env.LEMON_WEBHOOK_SECRET
8. Estimación de Costos
| Servicio | MVP (mes 1-3) | Crecimiento (mes 4-6) | Escala (mes 7-12) |
|---|---|---|---|
| Vercel | $0 (hobby) | $20/mes (pro) | $20/mes |
| Supabase | $0 (free) | $25/mes (pro) | $25/mes |
| Resend | $0 (<3K emails) | $0 | $20/mes |
| Dominio | $12/año | — | — |
| **Total** | **~$1/mes** | **~$45/mes** | **~$65/mes** |
El plan free de Supabase soporta hasta 50,000 filas y 2GB de storage. Con el plan Pro ($25/mes) obtenés backups diarios, 8GB storage y soporte prioritario. El salto tiene sentido cuando tenés usuarios pagando.
9. Riesgos y Mitigaciones
Riesgo 1 — Complejidad del tiempo real
Supabase Realtime puede tener latencia en conexiones lentas. Mitigación: implementar optimistic updates primero, Realtime como mejora progresiva.
Riesgo 2 — Límites del plan free
Supabase free tiene límite de 500MB de DB. Con TaskFlow Pro y equipos pequeños, esto da para ~6 meses. Planificar migración a Pro antes de llegar al límite.
Riesgo 3 — Retención de usuarios
Sin notificaciones push o email, los usuarios olvidan el producto. Implementar email digest desde semana 6 es crítico para la retención.
Riesgo 4 — Escalabilidad del kanban
Si un proyecto tiene +500 tareas, el drag & drop se puede poner lento. Mitigación: paginación virtual y lazy loading de columnas.
10. Primeros 3 Pasos Para HOY
1. Crear el proyecto base (30 minutos)
npx create-next-app@latest taskflow-pro --typescript --tailwind --app
Crear proyecto en supabase.com y copiar las variables de entorno.
2. Configurar Auth (2 horas)
Implementar login/register con email usando el prompt #1 y #3 de arriba.
Probar que el middleware protege /dashboard correctamente.
3. Primera tabla en producción (1 hora)
Crear la tabla teams y team_members en Supabase con RLS activado.
Al loguearse, verificar que se crea el equipo automáticamente.
¿Querés uno así para tu proyecto?
Respondés 30 preguntas sobre tu idea y en minutos tenés un Blueprint completo y 100% personalizado, con chat de IA incluido.
Obtener mi Blueprint →$30 LATAM · $40 Global · Garantía 7 días