TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Plataforma web para crear y compartir Video CV y Video Pitch.
Diseñada para talleres de capacitación laboral — el usuario graba su presentación en módulos guiados, el sistema une los fragmentos con FFmpeg y genera una URL pública para compartir.
| Capa | Tecnología |
|---|---|
| Framework | Next.js 14 (App Router) |
| Base de datos | PostgreSQL + Prisma ORM |
| Auth | JWT en cookie HttpOnly (jose) |
| Estilos | Tailwind CSS |
| Tipografías | Fraunces (display) + DM Sans (cuerpo) |
| Procesamiento video | FFmpeg (CLI) |
| Almacenamiento | Local /public/ (reemplazable por S3) |
git clone <repo>
cd oportunai
npm install
cp .env.example .env
Editá .env:
DATABASE_URL="postgresql://postgres:PASSWORD@localhost:5432/oportunai"
JWT_SECRET="clave-secreta-larga-y-aleatoria"
NEXT_PUBLIC_APP_URL="http://localhost:3000"
# Opcional — si ffmpeg no está en el PATH del sistema:
# FFMPEG_PATH="/usr/bin/ffmpeg"
# Crear la base
psql -U postgres -c "CREATE DATABASE oportunai;"
# Aplicar el schema
npm run db:push
# Cargar datos iniciales (módulos CV + Pitch + usuario admin)
npm run db:seed
# Ubuntu / Debian
sudo apt install ffmpeg
# macOS
brew install ffmpeg
# Verificar
ffmpeg -version
npm run dev
# → http://localhost:3000
| Campo | Valor |
|---|---|
[email protected] | |
| Contraseña | Admin1234! |
| Acceso | /admin |
Opción A — Desde psql:
UPDATE "Usuario" SET role = 'admin' WHERE email = '[email protected]';
Opción B — Prisma Studio:
npm run db:studio
# Abre http://localhost:5555
# Tabla Usuario → cambiar role a "admin"
Opción C — Script rápido:
node -e "
const { PrismaClient } = require('@prisma/client');
const p = new PrismaClient();
p.usuario.update({ where: { email: '[email protected]' }, data: { role: 'admin' } })
.then(u => { console.log('Admin:', u.email); p.\$disconnect(); });
"
/register y crear una cuenta/dashboard → clic en "Grabar Video CV"http://localhost:3000/u/{slug}/cvMismo flujo desde "Grabar Video Pitch" → perfil en /u/{slug}/pitch
.mp4/adminnpm run dev # Desarrollo (hot reload)
npm run build # Build de producción
npm run start # Servir build de producción
npm run db:push # Aplicar schema a la DB (sin migraciones)
npm run db:studio # Abrir Prisma Studio (GUI de la DB)
npm run db:seed # Cargar datos iniciales
oportunai/
├── app/
│ ├── page.tsx # Landing
│ ├── layout.tsx # Root layout + metadata global
│ ├── not-found.tsx
│ ├── login/page.tsx
│ ├── register/page.tsx
│ ├── dashboard/
│ │ ├── page.tsx # Server component — carga datos del usuario
│ │ ├── DashboardClient.tsx # Client component — UI del dashboard
│ │ ├── grabar-cv/page.tsx # Carga config Video CV → VideoRecorder
│ │ └── grabar-pitch/page.tsx # Carga config Video Pitch → VideoRecorder
│ ├── admin/
│ │ ├── page.tsx # Server component (solo role=admin)
│ │ └── AdminClient.tsx # Editor de módulos + lista de usuarios
│ ├── u/[slug]/
│ │ ├── cv/page.tsx # Perfil público Video CV + OG tags
│ │ └── pitch/page.tsx # Perfil público Video Pitch + OG tags
│ └── api/
│ ├── auth/{login,register,logout}/
│ ├── users/{me,bio,[slug]/contact}/
│ ├── files/{upload,download}/
│ ├── videos/{upload,merge,download}/
│ └── admin/{config,users}/
├── components/
│ ├── layout/Navbar.tsx # Barra de navegación autenticada
│ └── ui/
│ ├── VideoRecorder.tsx # Componente de grabación (CV y Pitch)
│ └── PublicProfileClient.tsx # Perfil público (CV y Pitch)
├── lib/
│ ├── auth.ts # JWT, sesiones, generador de slug
│ ├── prisma.ts # Cliente Prisma singleton
│ └── validations.ts # Schemas Zod
├── prisma/
│ ├── schema.prisma # Modelos de DB
│ └── seed.js # Datos iniciales
├── styles/globals.css # Estilos globales + variables CSS
├── middleware.ts # Protección de rutas
└── .env.example