Documento de uso interno. Las tareas se derivan del diagnóstico técnico (Ultra Review) y del análisis de readiness operativa de los tres repos (ApitiendasBackend, apitiendas admin, apitiendas-front storefront). Cada tarea incluye descripción, alcance técnico con evidencia (archivo:línea) y valor a pagar al desarrollador. Valores en pesos colombianos (COP).

Fase 1 · Seguridad y go-live

Bloqueante: sin esto la plataforma no debe operar con clientes.

1

Rotación de credenciales, limpieza de secretos y endurecimiento de configuración

$550.000
CríticoBackend~2 días

Descripción

Rotar todas las credenciales expuestas, sacar los secretos del repositorio y dejar la configuración de producción segura.

Alcance técnico

Rotar AWS (S3/SES), BD y claves base de JWT/Django; purgar .local.env del historial (git filter-repo) y agregar a .gitignore (.local.env:1-11). Mover secretos a variables de entorno de Elastic Beanstalk / Secrets Manager. Endurecer config/settings.py:22-24: ALLOWED_HOSTS por entorno, CORS_ALLOWED_ORIGINS whitelist, DEBUG=False. Reemplazar derivación de clave SHA-256 simple (config/keys/key.py) por clave aleatoria de alta entropía.

2

Autenticación y autorización: signup, JWT de sesión y cookie del storefront

$750.000
CríticoBackend + Storefront~3 días

Descripción

Cerrar la escalada de privilegios y la falsificación de sesiones.

Alcance técnico

Quitar user.is_staff = True del signup público y separar roles (signup.py:102-104; permiso en permissions_manager.py:4-7). En SessionJWTAuthentication cambiar verify=Falseverify=True con issuer/audience, validar session_obj no nula y expiración, atar el claim supplier a la sesión (session_jwt.py:33-52). Cookie de sesión del storefront a httpOnly:true + secure (apitiendas-front/src/middleware.ts:94-103,142).

3

Cierre de endpoints abiertos e IDOR (aislamiento por tenant)

$1.100.000
CríticoBackend~4 días

Descripción

Evitar accesos cruzados entre clientes/proveedores y endpoints sin autenticación.

Alcance técnico

Webhooks con verificación de firma HMAC + restringir CRUD (app/webhooks/views.py:11-19). DownloadOrdersXlsx con auth + scope por proveedor (app/orders/views/orders.py:62-73). Scoping por sesión/tenant en líneas de carrito (app/orders/views/cart.py:56-71), retrieve de pedidos y FK de producto cross-supplier. No enviar contraseñas en texto plano por SMS (webhooks/serializers.py:105-106).

Subtotal Fase 1 — $2.400.000

Fase 2 · Autogestión y operación

Lo que evita el desborde de soporte (readiness operativa).

4

Recuperación de cuenta (olvidé mi contraseña) end-to-end

$1.150.000
BloqueanteBackend + Admin + Storefront~4 días

Descripción

Flujo completo de recuperación por código (email/SMS) en los tres frentes.

Alcance técnico

Cablear vista + URL para los serializers ya existentes (password_recovery.py) y corregir la validación de expiración invertida (password_recovery.py:203-204). Conectar send_recovery_email/send_recovery_sms. UI "Olvidé mi contraseña" en admin (LoginModal) y flujo de recuperación en storefront para cliente que cambió de teléfono.

5

Autogestión de perfil y cambio de contraseña

$700.000
AltoBackend + Admin~2,5 días

Descripción

Que el usuario edite su perfil y cambie su contraseña sin soporte.

Alcance técnico

Convertir UpdateUserApiView de RetrieveAPIView a RetrieveUpdateAPIView (hoy un PATCH da 405; fetch_user.py:16-23). Habilitar edición de nombre/teléfono y cambio de contraseña; UI de cuenta en el admin y verificación del paso update_profile del signup (SignupModal.tsx:109-114).

6

Verificación de teléfono (OTP) en alta de cliente + manejo de SMS

$850.000
AltoStorefront + Backend~3 días

Descripción

Verificar el teléfono antes de crear la cuenta y dar feedback real del envío del código.

Alcance técnico

Agregar paso OTP antes de submitSignUpDirect en el storefront (SignupForm.tsx:32-56). Leer sms_sent y mostrar estado real; botón "Reenviar código" con cooldown y fallback a email (PhoneConfirmation.tsx:46-47).

7

Refresh de token (admin), logout en servidor y estados de error/carga

$750.000
AltoAdmin + Storefront~2,5 días

Descripción

Eliminar deslogueos "sin razón", pantallas colgadas y enlaces muertos.

Alcance técnico

Corregir interceptor de refresh: URL /auth/tokens/refresh, body refresh_token, parseo access.token (apitiendas/src/lib/axios.ts:91-106). Logout que llame POST /auth/logout (admin) y logout en storefront. Eliminar spinner infinito en ProtectedRoute.tsx:20-33; reemplazar alert()/errores tragados por toasts; arreglar enlace muerto /categories (SiteFooter.tsx:138).

Subtotal Fase 2 — $3.450.000

Fase 3 · Confiabilidad

Estabilidad y prevención de regresiones.

8

Procesamiento asíncrono de correos/PDF y logging

$700.000
MedioBackend~2,5 días

Descripción

Que el checkout no se bloquee enviando correos y que los errores queden registrados.

Alcance técnico

Mover send_order_email (render PDF + 2 SES) a tarea Celery .delay() tras commit; corregir DJANGO_SETTINGS_MODULE a config.settings y arranque de workers en EB. Logging estructurado en lugar de print.

9

Pruebas automatizadas mínimas + CI con gates

$800.000
MedioLos 3 repos~3 días

Descripción

Cobertura mínima de los flujos críticos y un pipeline que no deje pasar errores.

Alcance técnico

Tests de auth/JWT y carrito (backend), auth store/interceptor (admin), flujo de pedido (storefront). CI con lint + manage.py test + tsc --noEmit + build; corregir buildspec.yml (hoy no instala ni prueba).

Subtotal Fase 3 — $1.500.000

Adicional · Nueva funcionalidad

Fuera del diagnóstico, solicitada aparte.

10

Carga masiva de productos vía Excel (xlsx) Nueva

$1.150.000
Backend + Admin~4 días

Descripción

Subir un xlsx para crear/actualizar productos en lote, con plantilla, validación previa y reporte de resultado.

Alcance técnico

Plantilla descargable; endpoint de previsualización que parsea y valida sin persistir (campos requeridos, tipos, categoría/proveedor, presentaciones/precios) y devuelve filas válidas + errores; endpoint de confirmación que inserta en lote con transaction.atomic() y respeto del scoping por proveedor (tarea 3). Parseo con openpyxl (ya en requirements.txt). UI en admin: descargar plantilla, dropzone, tabla de revisión con errores resaltados y resumen (creados/actualizados/rechazados). Tope de filas y manejo de duplicados por SKU/nombre.

Subtotal Adicional — $1.150.000
Total a pagar al desarrollador $8.500.000 COP

Condiciones

Documento interno de AreizaDev — basado en Ultra Review + Readiness Operativa de Apitiendas · Valores en COP.