"use client"; import Link from "next/link"; import { FormEvent, useEffect, useState } from "react"; import { api, SettingsStatus, Subject } from "@/lib/api"; import { Shell } from "@/components/Shell"; import { Button, Card, Input, Label } from "@/components/ui"; export default function DashboardPage() { const [subjects, setSubjects] = useState([]); const [settings, setSettings] = useState(null); const [name, setName] = useState(""); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); async function load() { setError(""); try { const [subjectList, status] = await Promise.all([api.subjects(), api.settings()]); setSubjects(subjectList); setSettings(status); } catch (err) { setError(err instanceof Error ? err.message : "No se pudo conectar con la API"); } finally { setLoading(false); } } useEffect(() => { load(); }, []); async function createSubject(event: FormEvent) { event.preventDefault(); if (!name.trim()) return; await api.createSubject(name.trim()); setName(""); await load(); } return (

Plataforma personal

Materias

Organiza clases, PDFs, audios y videos por materia y semana. Todo termina en Markdown listo para ingesta en LLM.

{error && {error}} {loading ? Cargando... : (
{subjects.map((subject) => (
{subject.name}
{subject.slug}
Abrir materia
))} {subjects.length === 0 && No hay materias todavia. Crea la primera para empezar.}
)}
); }