https://github.com/asanchezyali/grayola-landing
Science Score: 13.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
○.zenodo.json file
-
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (1.8%) to scientific vocabulary
Repository
Basic Info
- Host: GitHub
- Owner: asanchezyali
- Language: TypeScript
- Default Branch: main
- Size: 132 KB
Statistics
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
Grayola - Plataforma de Gestión de Proyectos de Diseño
Esta plataforma web permite a Grayola, una startup de Design as a Service, gestionar eficientemente sus proyectos de diseño con una estructura de roles bien definida para clientes, diseñadores y project managers.
Contenido
- Grayola - Plataforma de Gestión de Proyectos de Diseño
- Contenido
- Características
- Tecnologías
- Estructura del Proyecto
- Requisitos
- Instalación
- Configuración
- Variables de Entorno
- Configuración de Supabase
- Estructura de la Base de Datos
- Tabla
profiles - Tabla
projects - Tabla
project_files - Tabla
project_comments - Row Level Security (RLS)
- Seguridad
- Guía de Uso
- Roles de Usuario
- Flujo de Trabajo Típico
- Implementación
- Capturas de Pantalla
- Colaboradores
Características
Sistema de autenticación y autorización con múltiples roles:
- Clientes: Pueden crear nuevos proyectos y ver solo sus propios proyectos
- Diseñadores: Pueden ver solo los proyectos asignados a ellos
- Project Managers: Tienen control total sobre todos los proyectos y usuarios
Gestión completa de proyectos (CRUD):
- Creación de proyectos con título, descripción y carga múltiple de archivos
- Visualización de proyectos según el rol del usuario
- Edición de proyectos (solo para roles autorizados)
- Eliminación de proyectos (solo para roles autorizados)
Sistema de comentarios para facilitar la comunicación entre clientes y diseñadores
Gestión de archivos con carga, visualización y descarga segura de archivos
Panel administrativo para project managers con gestión de usuarios y proyectos
Interfaz moderna y atractiva utilizando componentes de ShadCN UI y Tailwind CSS
Tecnologías
Frontend:
- Next.js 14 (React)
- TypeScript
- Tailwind CSS
- ShadCN UI (componentes)
Backend:
- Supabase (PostgreSQL)
- Supabase Auth (autenticación)
- Supabase Storage (almacenamiento de archivos)
Despliegue:
- Vercel (recomendado)
Estructura del Proyecto
grayola-project-management/
├── app/
│ ├── auth/ # Rutas de autenticación
│ ├── components/ # Componentes reutilizables
│ ├── dashboard/ # Dashboard del usuario
│ ├── lib/ # Utilidades y configuración
│ ├── projects/ # Gestión de proyectos
│ ├── providers/ # Providers de contexto
│ ├── layout.tsx # Layout principal
│ └── page.tsx # Página de inicio
├── components/ # Componentes UI (ShadCN UI)
├── public/ # Archivos estáticos
├── styles/ # Estilos globales
├── .env.example # Ejemplo de variables de entorno
├── .env.local # Variables de entorno locales (no en repositorio)
├── .gitignore # Configuración de Git
├── next.config.js # Configuración de Next.js
├── package.json # Dependencias del proyecto
├── README.md # Documentación
└── tsconfig.json # Configuración de TypeScript
Requisitos
- Node.js 18.0 o superior
- npm o yarn
- Cuenta en Supabase
Instalación
Clona el repositorio:
bash git clone https://github.com/tu-usuario/grayola-project-management.git cd grayola-project-managementInstala las dependencias: ```bash npm install
o con yarn
yarn install ```
Copia el archivo de ejemplo de variables de entorno:
bash cp .env.example .env.localConfigura las variables de entorno en
.env.localcon tus credenciales de Supabase.Inicia el servidor de desarrollo: ```bash npm run dev
o con yarn
yarn dev ```
Abre http://localhost:3000 en tu navegador.
Configuración
Variables de Entorno
Configura las siguientes variables en tu archivo .env.local:
```
Supabase
NEXTPUBLICSUPABASEURL=https://tu-proyecto.supabase.co NEXTPUBLICSUPABASEANONKEY=tu-clave-anon-publica SUPABASESERVICEROLEKEY=tu-clave-service-role
Aplicación
NEXTPUBLICAPPURL=http://localhost:3000 NEXTPUBLICAPPNAME=Grayola Project Management
Almacenamiento
NEXTPUBLICSTORAGE_BUCKET=project-files ```
Configuración de Supabase
- Crea un nuevo proyecto en Supabase.
- Ejecuta los scripts SQL proporcionados en
database-schema.sqlen el Editor SQL de Supabase. - Configura las políticas de seguridad (RLS) como se indica en la sección de Estructura de Base de Datos.
Estructura de la Base de Datos
El esquema de la base de datos incluye las siguientes tablas:
Tabla profiles
Extiende la tabla de usuarios predeterminada de Supabase con información adicional:
```sql CREATE TYPE userrole AS ENUM ('client', 'designer', 'projectmanager');
CREATE TABLE profiles ( id UUID REFERENCES auth.users(id) ON DELETE CASCADE, fullname TEXT NOT NULL, role userrole NOT NULL DEFAULT 'client', avatarurl TEXT, createdat TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc', NOW()), updated_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc', NOW()), PRIMARY KEY (id) ); ```
Tabla projects
Almacena información sobre los proyectos de diseño:
sql
CREATE TABLE projects (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
title TEXT NOT NULL,
description TEXT,
client_id UUID REFERENCES auth.users(id) NOT NULL,
designer_id UUID REFERENCES auth.users(id),
status TEXT NOT NULL DEFAULT 'pending', -- pending, in_progress, completed, cancelled
created_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc', NOW()),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc', NOW())
);
Tabla project_files
Almacena información sobre los archivos asociados a proyectos:
sql
CREATE TABLE project_files (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
project_id UUID REFERENCES projects(id) ON DELETE CASCADE NOT NULL,
file_name TEXT NOT NULL,
file_type TEXT NOT NULL,
file_size INT NOT NULL,
file_path TEXT NOT NULL,
uploaded_by UUID REFERENCES auth.users(id) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc', NOW())
);
Tabla project_comments
Almacena comentarios en proyectos:
sql
CREATE TABLE project_comments (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
project_id UUID REFERENCES projects(id) ON DELETE CASCADE NOT NULL,
user_id UUID REFERENCES auth.users(id) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc', NOW()),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc', NOW())
);
Row Level Security (RLS)
Se han configurado políticas de seguridad a nivel de fila para garantizar que los usuarios solo puedan acceder a los datos que les corresponden según su rol:
- Los clientes solo pueden ver sus propios proyectos
- Los diseñadores solo pueden ver los proyectos asignados a ellos
- Los project managers tienen acceso completo a todos los proyectos
Seguridad
El sistema implementa varias capas de seguridad:
- Autenticación mediante Supabase Auth
- Autorización basada en roles con políticas RLS en la base de datos
- Middleware de Next.js para proteger rutas según el rol del usuario
- Validación de formularios en el cliente y en el servidor
- Storage seguro con políticas de acceso para archivos
Guía de Uso
Roles de Usuario
Cliente
- Puede registrarse y crear su cuenta
- Puede crear nuevos proyectos con título, descripción y archivos
- Puede ver solo sus propios proyectos
- Puede añadir comentarios a sus proyectos
- Puede subir archivos adicionales a sus proyectos
Diseñador
- Puede ver solo los proyectos asignados
- Puede añadir comentarios a los proyectos asignados
- Puede subir archivos a los proyectos asignados
Project Manager
- Tiene acceso completo a todos los proyectos
- Puede asignar diseñadores a proyectos
- Puede cambiar el estado de los proyectos
- Puede gestionar usuarios (cambiar roles)
- Puede eliminar proyectos
Flujo de Trabajo Típico
- Un cliente crea un nuevo proyecto
- Un project manager revisa el proyecto y asigna un diseñador
- El diseñador trabaja en el proyecto, sube archivos y comenta
- El cliente y el diseñador colaboran mediante comentarios
- El project manager actualiza el estado del proyecto según avanza
- Cuando el proyecto está completo, se marca como "completado"
Implementación
Para implementar la aplicación en producción:
- Configura tu proyecto Supabase de producción
- Ejecuta los scripts SQL en el entorno de producción
- Implementa la aplicación en Vercel:
bash vercel --prod - Configura las variables de entorno en Vercel
Capturas de Pantalla
Colaboradores
Proyecto desarrollado para Grayola, una startup de Design as a Service.
© 2025 Grayola. Todos los derechos reservados.
Owner
- Name: Alejandro Sánchez Yalí
- Login: asanchezyali
- Kind: user
- Company: Monadical
- Website: www.asanchezyali.com
- Twitter: asanchezyali
- Repositories: 16
- Profile: https://github.com/asanchezyali
Mathematician with experience in Software Development, Data Science and Blockchain
GitHub Events
Total
- Push event: 14
- Pull request event: 1
- Create event: 2
Last Year
- Push event: 14
- Pull request event: 1
- Create event: 2
Dependencies
- 618 dependencies
- @eslint/eslintrc ^3 development
- @hookform/resolvers ^5.0.1 development
- @tailwindcss/postcss ^4 development
- @types/node ^20 development
- @types/react ^19 development
- @types/react-dom ^19 development
- eslint ^9 development
- eslint-config-next 15.2.5 development
- eslint-plugin-react-hooks ^5.2.0 development
- react-hook-form ^7.55.0 development
- shadcn ^2.4.0 development
- tailwindcss ^4 development
- typescript ^5 development
- zod ^3.24.2 development
- @radix-ui/react-avatar ^1.1.4
- @radix-ui/react-dialog ^1.1.7
- @radix-ui/react-dropdown-menu ^2.1.7
- @radix-ui/react-icons ^1.3.2
- @radix-ui/react-label ^2.1.3
- @radix-ui/react-select ^2.1.7
- @radix-ui/react-slot ^1.2.0
- @radix-ui/react-tabs ^1.1.4
- @supabase/auth-helpers-nextjs ^0.10.0
- @supabase/supabase-js ^2.49.4
- class-variance-authority ^0.7.1
- clsx ^2.1.1
- lucide-react ^0.487.0
- next 15.2.5
- next-themes ^0.4.6
- react ^18.3.1
- react-dom ^18.3.1
- sonner ^2.0.3
- tailwind-merge ^3.2.0
- tw-animate-css ^1.2.5