Saltar al contenido principal
Principiante CódigoTutorial

10 Ideas de Proyectos Finales para DAW y DAM que Puedes Hacer en 2026

Ideas de TFG para DAW y DAM con stack moderno, nivel de dificultad y tiempo estimado. Proyectos que impresionan al tribunal y te sirven de portfolio.

Fran Cobos 12 min de lectura 2381 palabras

Tabla de contenidos

Si estás leyendo esto es porque probablemente te toque el proyecto final pronto y estás entre la espada y la pared: necesitas una idea que sea lo bastante ambiciosa para impresionar al tribunal, pero lo bastante realista para no morir en el intento.

Tranqui. Aquí tienes 10 ideas probadas, con el stack tecnológico, nivel de dificultad y tiempo estimado. Todas pensadas para que te sirvan de portfolio después de entregar.

TL;DR — Las 3 que más impresionan a los tribunales:

  1. Dashboard de analíticas con gráficos en tiempo real (muestra que sabes manejar datos)
  2. App de gestión con roles y permisos (demuestra que entiendes seguridad)
  3. Marketplace o plataforma con pasarela de pago (lo más cercano a producción real)

Antes de elegir: las 3 reglas de oro

  1. Resuelve un problema real. No hagas “otro clon de Twitter”. Piensa en algo que tú, tu familia o tu pueblo necesite.
  2. Documenta desde el día 1. El 50% de la nota suele ser la memoria. Si dejas la documentación para el final, te va a salir una chapuza.
  3. Despliega en internet. Un proyecto solo en localhost es un ejercicio. Un proyecto desplegado es un portfolio. Usa Vercel, Railway o Render — todos tienen planes gratuitos.

Las 10 ideas (ordenadas de menos a más difícil)

1. Portfolio personal con blog integrado

Para: DAW | Dificultad: ⭐ | Tiempo: 1-2 semanas

No es la idea más original, pero es la más práctica: te queda un portfolio real que puedes usar para buscar trabajo.

Stack recomendado:

  • Frontend: Astro + Tailwind CSS
  • Blog: Markdown con content collections
  • Deploy: Netlify o Vercel (gratis)
<!-- Ejemplo: estructura básica responsive con Tailwind -->
<section class="max-w-4xl mx-auto px-4 py-12">
  <h1 class="text-4xl font-bold text-gray-900">
    Hola, soy [Tu Nombre] 👋
  </h1>
  <p class="text-lg text-gray-600 mt-4">
    <!-- Describe en 1 frase qué haces y qué buscas -->
    Desarrollador web junior especializado en React y Node.js.
    Busco mi primera oportunidad profesional.
  </p>
  <!-- Sección de proyectos con grid responsive -->
  <div class="grid md:grid-cols-2 gap-6 mt-8">
    <!-- Cada proyecto en una card -->
  </div>
</section>

Para subir nota: Añade un modo oscuro, un formulario de contacto funcional y analíticas con Plausible (open-source).


2. App de lista de tareas con autenticación

Para: DAW / DAM | Dificultad: ⭐⭐ | Tiempo: 2-3 semanas

Sí, es un clásico. Pero si la haces bien — con login real, base de datos y despliegue — demuestra que dominas el CRUD completo.

Stack recomendado (DAW):

  • Frontend: React + Vite
  • Backend: Node.js + Express
  • BBDD: PostgreSQL (Supabase gratis)
  • Auth: JWT con bcrypt

Stack recomendado (DAM):

  • Kotlin + Jetpack Compose
  • Room (SQLite local) o Firebase
  • Auth: Firebase Authentication
// Ejemplo: middleware de autenticación con JWT (Node.js)
// Este middleware verifica el token en cada petición protegida

import jwt from "jsonwebtoken";

function authMiddleware(req, res, next) {
  // 1. Extraer el token del header Authorization
  const header = req.headers.authorization;
  if (!header) {
    return res.status(401).json({ error: "Token no proporcionado" });
  }

  // 2. El formato es "Bearer <token>", así que separamos
  const token = header.split(" ")[1];

  try {
    // 3. Verificar que el token es válido y no ha expirado
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    // 4. Guardar los datos del usuario en la request
    req.userId = decoded.userId;
    next(); // ← continuar al siguiente middleware/ruta
  } catch (err) {
    return res.status(403).json({ error: "Token inválido o expirado" });
  }
}

Errores típicos que te darán un 0 en el examen:

  • Guardar contraseñas en texto plano (siempre usa bcrypt.hash())
  • No validar inputs en el backend (solo validar en frontend no sirve)
  • Usar localStorage para guardar el JWT en vez de una cookie httpOnly

3. Gestor de inventario para un negocio local

Para: DAW / DAM | Dificultad: ⭐⭐ | Tiempo: 2-3 semanas

Pregunta en la panadería, la ferretería o el bar de tu barrio si necesitan un sistema para controlar su stock. Proyecto real = nota alta + historia para la entrevista de trabajo.

Funcionalidades mínimas:

  • CRUD de productos (nombre, precio, cantidad, categoría)
  • Alertas de stock bajo
  • Historial de movimientos (entradas/salidas)
  • Exportar a CSV
-- Ejemplo: esquema de base de datos (PostgreSQL)
-- 3 tablas básicas que cubren todo

CREATE TABLE categorias (
  id SERIAL PRIMARY KEY,
  nombre VARCHAR(100) NOT NULL UNIQUE
);

CREATE TABLE productos (
  id SERIAL PRIMARY KEY,
  nombre VARCHAR(200) NOT NULL,
  precio DECIMAL(10,2) NOT NULL CHECK (precio >= 0),
  cantidad INTEGER NOT NULL DEFAULT 0 CHECK (cantidad >= 0),
  stock_minimo INTEGER NOT NULL DEFAULT 5,
  categoria_id INTEGER REFERENCES categorias(id),
  created_at TIMESTAMP DEFAULT NOW()
);

-- Cada vez que entra o sale stock, se registra aquí
CREATE TABLE movimientos (
  id SERIAL PRIMARY KEY,
  producto_id INTEGER REFERENCES productos(id),
  tipo VARCHAR(10) CHECK (tipo IN ('entrada', 'salida')),
  cantidad INTEGER NOT NULL CHECK (cantidad > 0),
  nota TEXT,  -- "Pedido proveedor X" o "Venta mostrador"
  created_at TIMESTAMP DEFAULT NOW()
);

4. Plataforma de reservas (citas, aulas, pistas deportivas)

Para: DAW | Dificultad: ⭐⭐⭐ | Tiempo: 3-4 semanas

Cualquier sistema de reservas impresiona porque resuelve un problema complejo: evitar conflictos de horarios.

Stack recomendado:

  • Next.js (frontend + API routes)
  • Prisma + PostgreSQL
  • Calendario visual con FullCalendar.js
  • Notificaciones por email con Resend (gratis)

El truco para impresionar: Añade una vista de calendario interactiva donde el usuario pueda ver qué slots están libres y reservar con un clic. Los tribunales valoran mucho el UX.


5. Dashboard de analíticas con gráficos en tiempo real

Para: DAW | Dificultad: ⭐⭐⭐ | Tiempo: 3-4 semanas

Conecta a una API pública (meteorología, criptomonedas, datos del INE) y muestra los datos en gráficos bonitos. Esto demuestra que sabes consumir APIs, transformar datos y presentarlos.

Stack recomendado:

  • React + Vite (o Next.js)
  • Chart.js o Recharts para gráficos
  • API pública: OpenWeather, CoinGecko, datos.gob.es
  • WebSocket para datos en “tiempo real” (optional, sube mucha nota)
// Ejemplo: hook personalizado para consumir API con React
// Gestiona loading, error y refetch automático

import { useState, useEffect } from "react";

function useApiData(url, intervaloMs = 60000) {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    // Función que hace el fetch
    async function fetchData() {
      try {
        setLoading(true);
        const res = await fetch(url);
        if (!res.ok) throw new Error(`HTTP ${res.status}`);
        const json = await res.json();
        setData(json);
        setError(null);
      } catch (err) {
        setError(err.message);
      } finally {
        setLoading(false);
      }
    }

    fetchData(); // Primera carga inmediata

    // Refetch automático cada X milisegundos
    const interval = setInterval(fetchData, intervaloMs);
    return () => clearInterval(interval); // Limpiar al desmontar
  }, [url, intervaloMs]);

  return { data, loading, error };
}

// Uso: const { data, loading } = useApiData("/api/ventas", 30000);

6. App de gestión con roles y permisos

Para: DAW / DAM | Dificultad: ⭐⭐⭐ | Tiempo: 3-4 semanas

Una app donde hay Admin, Editor y Usuario. Cada rol ve cosas diferentes y puede hacer acciones diferentes. Esto demuestra que entiendes seguridad y autorización, que es lo que las empresas más valoran.

Ejemplo de permisos:

AcciónAdminEditorUsuario
Ver contenido
Crear contenido
Editar cualquier contenidoSolo suyo
Gestionar usuarios
Ver panel de admin

Errores típicos que te darán un 0:

  • Controlar los permisos solo en el frontend (un fetch desde la consola del navegador se salta todo)
  • No verificar el rol en CADA endpoint del backend
  • Usar un solo middleware genérico en vez de permisos granulares

7. Red social / foro temático

Para: DAW | Dificultad: ⭐⭐⭐⭐ | Tiempo: 4-5 semanas

No intentes hacer “otro Instagram”. Haz un foro de nicho: para los estudiantes de tu instituto, para intercambiar apuntes, para organizar quedadas de estudio.

Funcionalidades mínimas:

  • Registro/login (OAuth con Google es fácil y queda profesional)
  • Crear hilos y responder con comentarios
  • Subir imágenes (Cloudinary gratis)
  • Sistema de likes/votos
  • Búsqueda por texto

Stack: Next.js + Prisma + Supabase + Cloudinary + NextAuth.js


8. E-commerce / Marketplace con pasarela de pago

Para: DAW | Dificultad: ⭐⭐⭐⭐ | Tiempo: 4-5 semanas

El proyecto que más impresiona a los tribunales porque es lo más cercano a una app real de producción.

Stack recomendado:

  • Next.js (App Router)
  • Stripe para pagos (tiene modo test gratuito)
  • Prisma + PostgreSQL
  • Cloudinary para imágenes de productos
  • Email transaccional con Resend
// Ejemplo: crear sesión de pago con Stripe (API route Next.js)
// El usuario clicka "Comprar" → se redirige a Stripe → vuelve a tu web

import Stripe from "stripe";

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

export async function POST(req) {
  const { items } = await req.json();

  // Crear la sesión de checkout de Stripe
  const session = await stripe.checkout.sessions.create({
    payment_method_types: ["card"],
    // Transformar tus items al formato que espera Stripe
    line_items: items.map((item) => ({
      price_data: {
        currency: "eur",
        product_data: { name: item.nombre },
        unit_amount: Math.round(item.precio * 100), // Stripe usa céntimos
      },
      quantity: item.cantidad,
    })),
    mode: "payment",
    // A dónde vuelve el usuario después de pagar (o cancelar)
    success_url: `${process.env.URL}/pedido/confirmado`,
    cancel_url: `${process.env.URL}/carrito`,
  });

  // Devolver la URL de Stripe para redirigir al usuario
  return Response.json({ url: session.url });
}

Nota importante: No necesitas procesar pagos reales. Stripe tiene un modo test con tarjetas ficticias. El tribunal va a alucinar igual.


9. App de gestión de FCT / prácticas

Para: DAW / DAM | Dificultad: ⭐⭐⭐ | Tiempo: 3-4 semanas

Un sistema donde los alumnos registran sus horas de prácticas, los tutores las validan y se genera un informe PDF automáticamente. Tus propios compañeros querrán usarla.

Funcionalidades:

  • Login con 3 roles: alumno, tutor centro, tutor empresa
  • Registro diario de actividades y horas
  • Validación por parte del tutor
  • Generación de PDF con resumen mensual (usa jsPDF)
  • Dashboard con horas acumuladas vs horas objetivo

10. Plataforma de aprendizaje con quiz interactivo

Para: DAW / DAM | Dificultad: ⭐⭐⭐⭐ | Tiempo: 4-5 semanas

Una web donde los usuarios pueden hacer tests sobre programación, ver sus resultados, y comparar con otros. Si la haces bien, tus compañeros la usarán para repasar exámenes.

Stack recomendado:

  • Frontend: React + Vite (o Next.js)
  • Backend: Node.js + Express (o API routes de Next.js)
  • BBDD: PostgreSQL con Prisma
  • Gamificación: sistema de puntos, racha diaria, ranking
// Ejemplo: lógica básica del quiz (React)
// Estado que controla pregunta actual, puntuación y si ha terminado

const [preguntaActual, setPreguntaActual] = useState(0);
const [puntos, setPuntos] = useState(0);
const [terminado, setTerminado] = useState(false);

function responder(indiceRespuesta) {
  // 1. Comprobar si la respuesta es correcta
  const esCorrecta =
    indiceRespuesta === preguntas[preguntaActual].correcta;

  // 2. Sumar puntos si acertó
  if (esCorrecta) setPuntos((prev) => prev + 10);

  // 3. Pasar a la siguiente pregunta o terminar
  if (preguntaActual + 1 < preguntas.length) {
    setPreguntaActual((prev) => prev + 1);
  } else {
    setTerminado(true);
    // Aquí guardarías la puntuación en la BBDD
  }
}

Cómo documentar tu TFG sin morir en el intento

La documentación es el 50% de la nota y el 90% de los suspensos son por una memoria mediocre. Aquí tienes la estructura mínima:

  1. Introducción — Qué problema resuelves y para quién
  2. Análisis de requisitos — Lista de funcionalidades (usa MoSCoW: Must/Should/Could/Won’t)
  3. Diseño — Diagrama de la base de datos + wireframes (usa Excalidraw, gratis)
  4. Tecnologías — Por qué elegiste cada herramienta (no vale “porque es la que conozco”)
  5. Implementación — Código relevante explicado, NO todo el código
  6. Pruebas — Screenshots de la app funcionando + tests si los tienes
  7. Conclusiones — Qué aprendiste y qué mejorarías
  8. Bibliografía — Fuentes, documentación oficial, tutoriales usados

Herramientas para la memoria:


Cómo desplegarlo gratis (y subir nota)

ServicioQué despliegasPlan gratuito
VercelFrontend (React, Next.js, Astro)Sí, ilimitado
NetlifyFrontend estáticoSí, 100GB/mes
RailwayBackend (Node, Python, Java)$5 gratis/mes
RenderBackend + BBDDSí, con limitaciones
SupabasePostgreSQL + Auth + StorageSí, 500MB
PlanetScaleMySQL serverlessPlan hobby gratis
CloudinaryImágenes y archivos25GB gratis

Los errores que más veo en proyectos finales

Después de ver decenas de TFGs (como desarrollador y como mentor), estos son los errores que más repiten los alumnos:

  1. Empezar por el frontend — Primero diseña la base de datos y las rutas de la API. El frontend es lo último
  2. No usar Git desde el principio — El tribunal quiere ver un historial de commits. Si subes todo de golpe al final, se nota y baja nota. Usa los comandos esenciales de Git
  3. Copiar código sin entenderlo — Van a preguntarte “¿por qué usaste esto aquí?”. Si no sabes responder, es un 0
  4. Cero gestión de errores — Si tu app crashea al meter datos raros, es suspense directo. Valida inputs siempre
  5. Memoria de 10 páginas — La memoria debería tener 40-60 páginas mínimo. Si es más corta, falta contenido

Consejo final: úsalo como portfolio

Tu proyecto final es tu carta de presentación para buscar trabajo. Cuando lo termines:

  1. Despliégalo en internet (enlaces arriba)
  2. Sube el código a GitHub con un README profesional
  3. Añádelo a tu portfolio personal
  4. Menciónalo en tu perfil de LinkedIn

Un proyecto real, desplegado y bien documentado vale más que 10 certificados de Udemy.


¿Te has atascado con tu proyecto final o necesitas ayuda con la documentación? Échale un ojo a mi sección de herramientas para developers o genera un prompt de debugging para que una IA te ayude.

Y si quieres más consejos sobre tu carrera en tech, aquí tienes la guía completa para estudiantes de DAW, DAM y ASIR.

Fran Cobos

Fran Cobos

Desarrollador Full Stack especializado en IA aplicada, automatización y desarrollo web. Escribo sobre herramientas, tutoriales y casos reales para programadores.

¿Necesitas desarrollo a medida?

Apps web, IA, módulos ERP — cuéntame tu proyecto.