merca y ch
This commit is contained in:
185
dev_plan_1.md
Normal file
185
dev_plan_1.md
Normal file
@@ -0,0 +1,185 @@
|
||||
<!-- --># Casa Benell - Dev Plan 1
|
||||
|
||||
## Goal
|
||||
Stabilize UI quality (responsive + proportional typography), adopt final brand assets, and start backend foundations for users/roles/invitations with PostgreSQL and SMTP.
|
||||
|
||||
## Current pain points (from first pass)
|
||||
- Typography scale is too large in several views.
|
||||
- Numeric values overflow cards and break layout.
|
||||
- Desktop-first layout is not fully adaptive on mobile.
|
||||
- Sidebar needs a true mobile hamburger/sheet pattern.
|
||||
- Brand assets in use are placeholders, not final logo/character files.
|
||||
- No DB/auth/invite flow yet (all role switching is local UI state).
|
||||
|
||||
## Inputs confirmed
|
||||
- Final logo source: `/home/mdares03/benell/example_ui_img/benell_logo.webp`
|
||||
- Theme character source: `/home/mdares03/benell/example_ui_img/Logo Benito.png`
|
||||
|
||||
## Implementation strategy (phased)
|
||||
|
||||
### Phase 1 - Responsive UI hardening
|
||||
Scope:
|
||||
- Normalize type scale and spacing so content always fits card boundaries.
|
||||
- Prevent number overflow in KPI cards, tables, and right panels.
|
||||
- Add mobile nav with hamburger + slide-out menu.
|
||||
- Improve responsive behavior for top bar filters/search/role selector.
|
||||
|
||||
Tasks:
|
||||
1. Define responsive typography tokens with `clamp(...)` and semantic utility classes.
|
||||
2. Replace oversized heading/body classes with tokenized scale:
|
||||
- H1/H2/H3/body/label/caption.
|
||||
3. Apply overflow-safe text rules:
|
||||
- `min-w-0` in flex/grid children.
|
||||
- `truncate`/`break-words` where needed.
|
||||
- `tabular-nums` for KPI numeric alignment.
|
||||
4. Refactor cards/tables to use adaptive grids:
|
||||
- desktop: 4 columns where available
|
||||
- tablet: 2 columns
|
||||
- mobile: 1 column
|
||||
5. Build mobile sidebar pattern:
|
||||
- top-left hamburger button
|
||||
- drawer/sheet navigation
|
||||
- keyboard and focus support
|
||||
6. Make Sankey containers responsive with controlled heights by breakpoint.
|
||||
7. Validate at widths: 360, 390, 768, 1024, 1280, 1536.
|
||||
|
||||
Acceptance criteria:
|
||||
- No text or numbers overflow containers at target breakpoints.
|
||||
- Dashboard, Financial Flow, Meetings, People remain usable on mobile.
|
||||
- Navigation works via sidebar (desktop) and hamburger drawer (mobile).
|
||||
|
||||
---
|
||||
|
||||
### Phase 2 - Final brand asset integration
|
||||
Scope:
|
||||
- Replace placeholder brand files with provided official assets.
|
||||
|
||||
Tasks:
|
||||
1. Copy and normalize assets into `/public/brand/`:
|
||||
- `logo.webp` from `benell_logo.webp`
|
||||
- `mascot.png` from `Logo Benito.png`
|
||||
2. Update components to use final files in:
|
||||
- sidebar/header brand block
|
||||
- login page
|
||||
- empty states
|
||||
3. Verify object-fit/crop so assets render clean on desktop + mobile.
|
||||
|
||||
Acceptance criteria:
|
||||
- Only final brand assets are used in app shell and empty states.
|
||||
- No stretching, clipping, or quality loss in common viewport sizes.
|
||||
|
||||
---
|
||||
|
||||
### Phase 3 - PostgreSQL foundation + RBAC data model
|
||||
Scope:
|
||||
- Start real user data layer with psql.
|
||||
- Keep mock business metrics for now, but migrate auth/user/role from local store to DB-backed model.
|
||||
|
||||
Tech decisions (proposed):
|
||||
- ORM: Prisma
|
||||
- DB: PostgreSQL
|
||||
- Auth/session: NextAuth/Auth.js with DB adapter
|
||||
- Password hashing: bcrypt
|
||||
- Email: Nodemailer SMTP transport
|
||||
|
||||
Core schema (initial):
|
||||
1. `users`
|
||||
- `id`, `name`, `email` (unique), `password_hash`, `status`, `created_at`, `updated_at`
|
||||
2. `roles`
|
||||
- `id`, `key` (`owner|leader|employee`), `name`
|
||||
3. `user_roles`
|
||||
- `user_id`, `role_id` (many-to-many)
|
||||
4. `invitations`
|
||||
- `id`, `email`, `role_key`, `token_hash`, `expires_at`, `accepted_at`, `invited_by`, `created_at`
|
||||
5. `user_locations` (optional in this phase, recommended)
|
||||
- `user_id`, `location_id`
|
||||
|
||||
Tasks:
|
||||
1. Add Prisma and configure `DATABASE_URL`.
|
||||
2. Create schema + first migration.
|
||||
3. Add seed script for default roles and bootstrap owner account.
|
||||
4. Add auth route handlers and session callback to include role.
|
||||
5. Add middleware route protection for authenticated app routes.
|
||||
6. Replace UI-only role switcher with role from session (keep optional dev override flag).
|
||||
|
||||
Acceptance criteria:
|
||||
- App can connect to PostgreSQL locally.
|
||||
- At least one owner user can login from DB.
|
||||
- Protected routes reject anonymous requests.
|
||||
- Role can be read from DB session payload.
|
||||
|
||||
---
|
||||
|
||||
### Phase 4 - Invitation flow via SMTP
|
||||
Scope:
|
||||
- Admin/owner can invite users by email and assign role.
|
||||
|
||||
Tasks:
|
||||
1. Add env variables for SMTP and app URLs.
|
||||
2. Create server actions or API routes:
|
||||
- `POST /api/invitations`
|
||||
- `POST /api/invitations/accept`
|
||||
3. Generate secure random invitation tokens; store hash only.
|
||||
4. Send email with invitation link (token + expiry).
|
||||
5. Create acceptance page:
|
||||
- set password
|
||||
- confirm profile basics
|
||||
- finalize user + role assignment
|
||||
6. Add invitation status UI in admin/settings page.
|
||||
|
||||
Acceptance criteria:
|
||||
- Owner can send invite with selected role.
|
||||
- Recipient can accept invite and create account before expiry.
|
||||
- Used/expired tokens are rejected.
|
||||
|
||||
---
|
||||
|
||||
### Phase 5 - Operational readiness and migration cleanup
|
||||
Scope:
|
||||
- Make deployment process stable under existing systemd flow.
|
||||
|
||||
Tasks:
|
||||
1. Add `.env.example` with required vars only (no secrets).
|
||||
2. Add startup checks for missing env values.
|
||||
3. Document production sequence:
|
||||
- `npm run build`
|
||||
- `sudo systemctl restart benell.service`
|
||||
4. Add backup/rollback notes for DB migrations.
|
||||
|
||||
Acceptance criteria:
|
||||
- Clear runbook for local/prod env setup.
|
||||
- No manual guessing for env keys or migration order.
|
||||
|
||||
## Environment variables to add (planned)
|
||||
- `DATABASE_URL=postgresql://...`
|
||||
- `NEXTAUTH_URL=https://benell.maliountech.com.mx`
|
||||
- `NEXTAUTH_SECRET=...`
|
||||
- `SMTP_HOST=...`
|
||||
- `SMTP_PORT=587`
|
||||
- `SMTP_USER=...`
|
||||
- `SMTP_PASS=...`
|
||||
- `SMTP_FROM="Casa Benell <noreply@...>"`
|
||||
- `INVITE_TTL_HOURS=72`
|
||||
|
||||
## Risks and mitigations
|
||||
- Risk: auth migration blocks UI progress.
|
||||
- Mitigation: complete UI responsive fixes first, then backend integration.
|
||||
- Risk: role logic duplicated in client and server.
|
||||
- Mitigation: single source of truth from session role, with temporary dev override only.
|
||||
- Risk: invite token leakage.
|
||||
- Mitigation: store hashed tokens, set short expiry, single-use tokens.
|
||||
|
||||
## Execution order
|
||||
1. Phase 1 (UI hardening)
|
||||
2. Phase 2 (brand assets)
|
||||
3. Phase 3 (DB + auth + RBAC)
|
||||
4. Phase 4 (SMTP invites)
|
||||
5. Phase 5 (runbook + stability)
|
||||
|
||||
## Deliverables for this plan
|
||||
- Responsive and proportional UI baseline.
|
||||
- Mobile hamburger navigation.
|
||||
- Final branding applied.
|
||||
- PostgreSQL user/role foundation.
|
||||
- SMTP invitation workflow.
|
||||
- Updated docs for env and deployment.
|
||||
Reference in New Issue
Block a user