jfastframework
Documentación English PyPI GitHub

v0.1.0a12 · alpha

Deja de reconstruir el mismo backend.

Un comando: FastAPI, PostgreSQL, Redis, jobs, un frontend en Vue y un reverse proxy. Conectados, en contenedores, migrando al arrancar. Lo que escribes es la parte que solo tú conoces.

$ pip install jfastframework
$ jfast start shop

✓ shop/        FastAPI · Postgres · Redis
✓ shop-web/    Vue 3 · Vite
✓ compose      un contenedor por recurso
✓ Caddyfile    TLS · un solo host
1comando y el stack corre
26plugins, todos removibles
4arquitecturas por módulo
2,000funciones de test

Alpha. La tabla de madurez dice qué partes están probadas contra infraestructura real y cuáles no.

Genera

FastAPI PostgreSQL pgvector Redis SQLAlchemy Alembic Vue 3 React Tailwind Docker Caddy

Antes y después

La misma función, dos veces.

A mano

Conectar la sesión. Decidir dónde va la query. Agregar modelo, router, migración y servicio de compose. Enterarte en el review de que alguien consultó la base desde un handler.

Aquí

jfast new module invoice — router, service, repository, schemas y un test, registrados, bajo un contrato que rompe el build si el handler toca la base.

El diseño

Tres ideas, y lo que cuesta cada una.

01

La lógica de negocio primero

La plomería es una lista de plugins. El diff de la rama es la funcionalidad.

CostoHeredas opiniones, y se exigen.

02

Los agentes no se desvían

Cada regla la verifica una máquina, y cada violación dice el arreglo.

CostoEscribir el contrato es trabajo.

03

Separa cuando sepas dónde

Hoy un monolito modular; un comando convierte un módulo en servicio.

CostoUn monolito el día uno.

Barandales

Vibe-coding con cinturón.

Generar código rápido ya está resuelto. Mantenerlo coherente tras la cuarta funcionalidad, no.

$ jfast contracts check

modules/payment/service.py:41: cross-module: module 'payment' imports module 'invoice'
  (two modules that need the same thing should share it: move it to shared/enums.py)

modules/billing/service.py:88: blocking-call: time.sleep stalls the event loop
  (every request on this worker waits; use await asyncio.sleep)

Los módulos siguen separados

Dos que se importan entre sí ya no se pueden separar.

Nada bloqueante

Un time.sleep frena todas las peticiones del worker.

Un 201 significa que la fila existe

La sesión confirma antes de responder, y una carrera es un 409, no una escritura perdida.

Para quién es

Para quien lo escriba.

01

Tu primer backend

El módulo generado es un ejemplo que lees en cinco minutos.

02

Sacando funcionalidades

Te saltas la plomería; el checker atrapa el atajo de las 6pm.

03

Liderando un equipo

El review es sobre la funcionalidad; la estructura la revisa la CI.

04

Dirigiendo agentes

Reglas que la IA lee primero y no puede romper en silencio.

Documentación

Por dónde empezar.

Toda la documentación →

Escribe las reglas. No la plomería.

Genera el stack con un comando, y deja que la CI lo mantenga con la forma que elegiste mientras un equipo — o un agente — trabaja en él.