# RG Fish Farming Website Audit

**Audit date:** 5 October 2026  
**Frontend:** Next.js 16, React 19, TypeScript, Tailwind CSS 4  
**Backend:** Django 5  
**Purpose:** Identify every website action, registration requirement, upload area, and content item that should be managed by an administrator.

## 1. Executive Summary

The website frontend is visually developed and connected to a small Django JSON endpoint. The Django backend is not yet a content-management system.

Current backend limitations:

- No database content models
- No Django admin dashboard
- No media upload system
- No user registration
- No working login or logout
- No partner accounts or portal
- No fingerling order records
- No training request records
- No news publishing workflow
- No project publishing workflow
- No gallery management
- No partner-logo uploads
- No FAQ management

Most website content is currently hard-coded in React, Django Python dictionaries, or the `public/gallery` folder. The recommended solution is to use Django Admin as the management dashboard and expose managed content to the React frontend through API endpoints.

## 2. Current Website Actions

| Area | Visible action | Current status | Required work |
|---|---|---|---|
| Header | Home, stories, gallery, projects, news navigation | Working | Keep |
| Header | Partner login | Opens login page only | Connect to Django authentication |
| Mobile menu | Open and close menu | Working | Keep |
| Hero | Discover our story | Working navigation | Keep |
| Hero | See our impact | Working navigation | Keep |
| Hero | Pause or play image grid | Working in browser | Keep |
| Fingerlings | Order fingerlings now | Opens an email application | Replace with a managed order/request form |
| Training | Contact us | Opens an email application | Replace with a managed training request form |
| Services | Request a service | Not available | Add managed services and customer requests |
| Customer support | Floating WhatsApp button | Not available | Add an admin-configured WhatsApp contact button |
| Account | Customer registration | Not available | Add account creation and email verification |
| Homepage projects | View all projects | Working navigation | Keep |
| Homepage project cards | Explore | All cards open the same projects page | Add individual project detail pages |
| Homepage news | Read all news | Working navigation | Keep |
| Homepage news items | Open news | All items open the general news page | Add individual article detail pages |
| FAQ | Open and close answers | Working in browser | Move FAQ content to Django Admin |
| News page | Read field note | Button has no action | Link to an article detail page |
| Login page | Sign in | Visual form only | Add real authentication and error handling |
| Footer | Email | Opens email application | Keep; make address admin-managed |
| Footer | Telephone | Opens telephone application | Uses placeholder number; replace and manage in admin |

## 3. Content Location Audit

| Content | Current source | Admin management needed |
|---|---|---|
| Homepage statistics | Django dictionary with React fallback | Yes |
| Homepage featured projects | Django dictionary with React fallback | Yes |
| Homepage featured news | Django dictionary with React fallback | Yes |
| Partner names | Django dictionary with React fallback | Yes, including logo uploads |
| Homepage FAQ | `app/page.tsx` | Yes |
| Hero title and labels | `components/site.tsx` | Yes, if regular editing is required |
| Hero moving images | `components/site.tsx` | Yes, including order and visibility |
| Hero right image | `components/site.tsx` | Yes |
| Gallery | `app/gallery/page.tsx` and `public/gallery` | Yes |
| Projects page | `app/projects/page.tsx` | Yes |
| News page | `app/news/page.tsx` | Yes |
| Production journey | `app/our-stories/page.tsx` | Yes |
| Harvest steps | `app/our-stories/page.tsx` | Yes |
| Footer details and image | `components/site.tsx` | Yes |
| Brand metadata | `app/layout.tsx` and Django dictionary | Yes |

## 4. Required Admin Modules

### 4.1 Dashboard

The dashboard must contain only statistics, graphs, and charts. Create and edit forms must remain on separate management pages.

Dashboard statistics:

- Total visitors
- Unique visitors
- New users
- Verified users
- New fingerling orders
- New service requests
- New training requests
- Pending partner applications
- Published news
- Private news
- Active projects
- Private projects
- Gallery images
- WhatsApp clicks
- Email delivery rate

Dashboard graphs and charts:

- Visitor trend line chart
- Page views bar chart
- Service views bar chart
- Service conversion funnel
- Requests by service doughnut chart
- Order status doughnut chart
- User registration line chart
- News views bar chart
- Project views bar chart
- WhatsApp click trend chart
- Email delivery status chart

Dashboard rules:

- No forms
- No upload fields
- No create forms
- No edit forms
- No long content tables
- Date-range filter only
- Role-based statistics
- Clickable chart drill-down
- Responsive chart grid
- Clear chart labels
- Accessible chart colors

### 4.2 Site Settings

Admin fields:

- Business name
- Tagline
- Business description
- Email address
- Tanzania telephone number
- Physical address
- Social-media links
- Customer-support WhatsApp number
- Default WhatsApp message
- WhatsApp button visibility
- Admin notification email addresses
- Notification event settings
- Footer labels
- Footer background image
- Brand logo
- Browser icon
- SEO title
- SEO description

The current footer telephone number is `+234 800 000 0000`, which is a placeholder and does not match the Tanzania location.

### 4.3 Homepage Management

Admin controls:

- Hero heading
- Hero tagline
- Hero service labels
- Hero right-side image
- Moving hero-grid images
- Hero image order
- Hero image visibility
- Statistics and display order
- Featured projects
- Featured news
- Partner logos and order
- Questions and answers
- Section visibility

### 4.3.1 Service Catalogue

Admin should be able to create the services that customers can request from the website.

Required service fields:

- Service name
- Slug
- Service category
- Short label
- Full description
- Cover image
- Request instructions
- Price label or “request a quotation” label
- Availability status
- Featured status
- Display order
- Published status

Suggested services include:

- Fingerling orders
- Fish-farm training
- Farm setup guidance
- Pond preparation support
- Water-quality support
- Partnership enquiries

Every active service should have a clear “Request service” action. The selected service must be included automatically in the submitted request.

### 4.4 News Management

Required article fields:

- Title
- Slug
- Category
- Summary
- Full article body
- Featured image
- Gallery images
- Author
- Publication date
- Status: draft, scheduled, published, archived
- Visibility: public or private
- Private access roles
- Featured on homepage
- SEO title and description

Required functions:

- Create, edit, preview, publish, schedule, unpublish, and archive
- Upload article images
- Filter articles by status, category, author, and date
- Open a unique public URL such as `/news/article-slug`
- Make the complete news card clickable
- Show a visible “New” badge on recently created news
- Calculate the “New” badge from the creation date
- Configure the “New” badge duration in admin
- Use clean cards with light borders and clear spacing
- Restrict private news to authorised signed-in users
- Hide private news from public lists and search engines

Recommended “New” badge rules:

- Latest created news highlighted
- Seven-day default duration
- Admin-configurable duration
- Automatic badge removal after expiry
- High-contrast badge
- Screen-reader label
- No manual badge removal required

Current issue: the news page uses hard-coded summaries and every “Read field note” button has no destination.

### 4.5 Project Management

Required project fields:

- Project name
- Slug
- Project category
- Short summary
- Full description
- Cover image
- Project gallery
- Location
- Start date
- End date
- Status: planned, active, completed, archived
- Visibility: public or private
- Private access roles
- Partners
- Results or impact figures
- Featured on homepage
- Display order

Required functions:

- Create, edit, preview, publish, unpublish, and archive
- Upload a cover image and supporting images
- Open a unique public URL such as `/projects/project-slug`
- Make the complete project card clickable
- Show a clear hover and keyboard-focus state
- Restrict private projects to authorised signed-in users
- Hide private projects from public lists and search engines
- Show private-status labels inside admin

Current issue: the homepage and projects page use different hard-coded project lists. Project cards do not have individual detail pages.

### 4.5.1 Page Clarity Standards

All public and admin pages should use:

- Clear page title
- Short labels
- Visible breadcrumb
- One primary action
- Consistent content width
- Consistent spacing
- Light borders
- Clear status badges
- Clear active navigation
- Clear hover state
- Clear keyboard-focus state
- Clear empty state
- Clear loading state
- Clear success state
- Clear error state
- Mobile-responsive layout
- Forms on dedicated pages
- Tables on management pages only
- Charts on dashboard only

### 4.6 Gallery Management

Required gallery fields:

- Image upload
- Title
- Alternative text
- Caption
- Category
- Date taken
- Photographer or source
- Featured status
- Display order
- Published status

Required functions:

- Multi-image upload
- Image reordering
- Image replacement
- Image deletion with confirmation
- Image compression and thumbnail generation
- Filtering by category

Current issue: the gallery automatically lists files `1.png` through `58.png` and `59.webp`. Images cannot be titled, categorized, reordered, hidden, or managed through Django.

### 4.7 Partner Management

Required partner fields:

- Partner name
- Logo upload
- Website URL
- Short description
- Partner type
- Display order
- Active status

Current issue: partner entries are text names only. The moving partner section does not use uploaded logos.

### 4.8 FAQ Management

Required FAQ fields:

- Question
- Answer
- Category
- Display order
- Published status

Required functions:

- Create, edit, reorder, publish, and remove questions
- Select which questions appear on the homepage

Current issue: all questions and answers are hard-coded in `app/page.tsx`.

### 4.9 Production Journey Management

Required journey fields:

- Stage number
- Stage name
- Heading
- Description
- Checklist items
- Main image
- Alternative text
- Display order
- Published status

Required harvest-step fields:

- Step number
- Title
- Description
- Background image
- Display order

Current issue: egg processing, fingerling growth, grow-out, harvesting, images, and supporting text are hard-coded in `app/our-stories/page.tsx`.

## 5. Registration and Account Management

### 5.1 Current Status

The `/login` page contains email and password fields, but the form is not connected to Django. There is no registration page, user database workflow, session handling, password reset, or protected portal.

The Django project does not currently enable:

- `django.contrib.auth`
- `django.contrib.admin`
- `django.contrib.sessions`
- Authentication middleware
- Session middleware

### 5.2 Recommended Account Types

| Role | Access |
|---|---|
| Super administrator | Full system and user control |
| Content manager | News, projects, gallery, FAQ, partners, and page content |
| Sales manager | Fingerling orders, customer records, order status, and exports |
| Training manager | Training requests, schedules, participants, and follow-up |
| Customer | Profile, orders, service requests, messages, and request history |
| Partner | Approved portal documents and production updates |
| Viewer | Read-only dashboard reports |

### 5.3 Recommended Registration Flow

Partner registration should use approval rather than immediate access:

1. Applicant submits a partner-registration form.
2. Admin receives a pending application.
3. Admin reviews and approves or rejects the application.
4. Approved applicant receives an account invitation.
5. User creates a password.
6. User signs in to the protected partner portal.

Required account functions:

- Customer registration
- Login
- Logout
- Password reset
- Password change
- Email verification
- Account activation and deactivation
- Role assignment
- Login activity record
- Admin-created account invitation

Customer registration should create an activity record and send an email notification to the administrator. Partner registration should continue to require admin approval before partner-portal access is granted.

## 6. Fingerling Order Management

### 6.1 Public Order Form

Required fields:

- Customer name
- Farm or organisation name
- Email
- Telephone
- Region and district
- Fish species
- Quantity
- Pond or tank type
- Preferred collection or delivery date
- Delivery or collection choice
- Notes
- Consent checkbox

### 6.2 Admin Order Workflow

Recommended statuses:

- New
- Contacted
- Availability confirmed
- Quotation sent
- Confirmed
- Preparing
- Ready for collection
- Dispatched
- Completed
- Cancelled

Admin functions:

- View and filter orders
- Assign an order to a staff member
- Add private notes
- Update status
- Record quoted amount
- Export orders to CSV
- Send customer confirmation and status emails
- Keep a complete status history

Current issue: “Order fingerlings now” only opens an email application. No website record is created.

## 7. Fish-Farm Training Management

### 7.1 Public Training Request Form

Required fields:

- Full name
- Organisation or farm
- Email
- Telephone
- Location
- Experience level
- Training topics
- Number of participants
- Preferred date
- On-farm or group training choice
- Notes

### 7.2 Admin Training Workflow

Recommended statuses:

- New
- Contacted
- Scheduled
- Confirmed
- Completed
- Cancelled

Admin functions:

- Review requests
- Assign a trainer
- Schedule a date and location
- Record participant count
- Send confirmation
- Upload training documents
- Record completion and follow-up notes
- Export participant lists

Current issue: “Contact us” only opens an email application. No training request is saved.

## 8. Service Requests and Customer Support

### 8.1 Customer Service Requests

A registered customer should be able to select a published service and submit a request through the website.

Required request fields:

- Automatic request number
- Customer account
- Selected service
- Customer name
- Email
- Telephone
- Region and district
- Preferred date
- Quantity, where applicable
- Request details
- Optional attachment
- Consent checkbox
- Created date
- Last updated date

Recommended request statuses:

- New
- Under review
- Customer contacted
- Quotation sent
- Confirmed
- In progress
- Completed
- Rejected
- Cancelled

Customer account functions:

- Submit a service request
- View request number
- View current status
- View request history
- Add requested information
- Cancel an eligible request
- Receive confirmation and status emails

Admin functions:

- View all service requests
- Filter by service, customer, date, status, and assigned staff member
- Assign staff
- Add private admin notes
- Add customer-visible updates
- Change status
- Upload quotations or supporting documents
- Export requests
- View the full request activity timeline

### 8.2 Floating WhatsApp Support Button

Add a floating WhatsApp customer-support button on all public pages.

Admin-managed settings:

- WhatsApp telephone number with country code
- Support label
- Default pre-filled message
- Operating hours
- Active or inactive status
- Pages where the button is visible
- Button position

Button behaviour:

- Open the official WhatsApp direct-message URL
- Include the current page or selected service in the pre-filled message
- Work on mobile and desktop
- Use an accessible label
- Record a support-button click event for analytics
- Hide automatically when no active WhatsApp number is configured

Recommended message format:

> Hello RG Fish Farming. I need help with [service name]. I am contacting you from [page URL].

The WhatsApp number must not be hard-coded in React. Admin should update it from Django Admin.

### 8.3 Configurable Email Notifications

Admin should be able to add one or more email addresses that receive system notifications.

Events that should notify admin:

- New customer account created
- New partner application submitted
- New fingerling order submitted
- New training request submitted
- New general service request submitted
- New contact enquiry submitted
- Request attachment uploaded
- Failed email notification

Email settings:

- Primary notification email
- Additional recipient emails
- Enable or disable each event
- Reply-to address
- Sender name
- Email subject templates
- Customer confirmation enabled or disabled

Each notification should include:

- Event type
- Customer name and contact details
- Account or request number
- Selected service
- Submission date and time
- Direct admin link to the related record

Notification delivery should be recorded with pending, sent, and failed statuses. Failed emails should be retryable and visible to admin.

### 8.4 Detailed Activity Log

Admin should have a read-only activity log for customer, staff, and system actions.

Events to record:

- Account created, verified, activated, or deactivated
- Successful and failed login
- Password reset requested and completed
- Order or service request created
- Request status changed
- Request assigned to staff
- File uploaded or downloaded
- Admin record created, edited, published, archived, or deleted
- Notification sent or failed
- WhatsApp support button clicked

Activity record fields:

- Date and time
- Actor type: customer, partner, staff, system, or guest
- Actor account
- Action
- Record type
- Record ID
- Human-readable description
- Previous and new values for important changes
- IP address or privacy-safe IP hash
- User agent
- Request ID
- Result: success or failure

Admin functions:

- Search logs
- Filter by actor, action, record type, date, and result
- Open the related customer, order, or request
- Export logs
- Apply a defined retention period
- Prevent normal staff from editing activity records

### 8.5 Visitor and Service Analytics

Admin should be able to view visitor activity for each page and service.

Required dashboard metrics:

- Total page views
- Unique visitors or sessions
- Visitors by page
- Visitors by service
- Service-card views
- Service-request button clicks
- Submitted requests by service
- Conversion rate from service view to request
- WhatsApp button clicks
- Most-viewed news articles
- Most-viewed projects
- Referring source
- Device type
- Date range comparison

Recommended filters:

- Today
- Last 7 days
- Last 30 days
- Custom date range
- Page
- Service
- Device type
- Referring source

Analytics events:

- `page_view`
- `service_view`
- `service_request_started`
- `service_request_submitted`
- `fingerling_order_submitted`
- `training_request_submitted`
- `account_created`
- `whatsapp_support_clicked`
- `news_article_viewed`
- `project_viewed`

Visitor tracking must use privacy-aware collection, avoid unnecessary personal data, respect consent requirements, and apply a data-retention policy.

## 9. Partner Portal

The login page promises production updates, documents, and partnership resources, but no portal exists.

Recommended portal features:

- Partner profile
- Production updates
- Shared documents
- Project updates
- Announcements
- Download history
- Account settings
- Support contact

Recommended managed document fields:

- Title
- File upload
- Document category
- Description
- Publication date
- Visible partner groups
- Active status

## 10. Recommended Django Data Models

Minimum models:

- `SiteSetting`
- `HomeStat`
- `HeroImage`
- `NewsCategory`
- `NewsArticle`
- `ProjectCategory`
- `Project`
- `ProjectImage`
- `GalleryImage`
- `Partner`
- `FAQ`
- `JourneyStage`
- `JourneyChecklistItem`
- `HarvestStep`
- `FingerlingOrder`
- `TrainingRequest`
- `ServiceCategory`
- `Service`
- `ServiceRequest`
- `PartnerApplication`
- `PartnerProfile`
- `PortalDocument`
- `ContactEnquiry`
- `StatusHistory`
- `NotificationRecipient`
- `NotificationDelivery`
- `ActivityLog`
- `VisitorSession`
- `AnalyticsEvent`

Use Django's built-in `User` and `Group` system for accounts and permissions unless custom user fields are required before the first production migration.

## 11. Required API Endpoints

### Public read endpoints

- `GET /api/site-settings/`
- `GET /api/home/`
- `GET /api/news/`
- `GET /api/news/<slug>/`
- `GET /api/projects/`
- `GET /api/projects/<slug>/`
- `GET /api/gallery/`
- `GET /api/partners/`
- `GET /api/faqs/`
- `GET /api/journey/`
- `GET /api/services/`
- `GET /api/services/<slug>/`
- `GET /api/support-settings/`

### Public submission endpoints

- `POST /api/fingerling-orders/`
- `POST /api/training-requests/`
- `POST /api/partner-applications/`
- `POST /api/contact-enquiries/`
- `POST /api/service-requests/`
- `POST /api/analytics/events/`

### Authentication endpoints

- `POST /api/auth/register/`
- `POST /api/auth/login/`
- `POST /api/auth/logout/`
- `POST /api/auth/password-reset/`
- `POST /api/auth/password-reset/confirm/`
- `GET /api/auth/me/`

### Protected portal endpoints

- `GET /api/portal/updates/`
- `GET /api/portal/documents/`
- `GET /api/portal/profile/`
- `PATCH /api/portal/profile/`
- `GET /api/account/requests/`
- `GET /api/account/requests/<request-number>/`
- `POST /api/account/requests/<request-number>/messages/`

## 12. Media Upload Requirements

The backend currently has no media configuration or image-processing dependency.

Required backend additions:

- `MEDIA_ROOT`
- `MEDIA_URL`
- Development media routing
- Production object storage or persistent media volume
- Pillow for image validation and processing
- File-size limits
- Allowed image and document extensions
- Unique generated filenames
- Thumbnail generation
- Alternative-text field
- Safe deletion rules for files still in use

Recommended upload types:

| Area | Uploads |
|---|---|
| Site settings | Logo, browser icon, footer image |
| Homepage | Hero image and moving-grid images |
| News | Featured image and article images |
| Projects | Cover image and gallery images |
| Gallery | Multiple photographs |
| Partners | Transparent PNG, WebP, or SVG logos |
| Production journey | Stage images and harvest images |
| Portal | PDF, spreadsheet, document, and image files |

## 13. Publishing and Admin Rules

All public content should support:

- Draft and published states
- Created and updated timestamps
- Created-by and updated-by records
- Display order
- Preview before publishing
- Active or inactive status
- Public or private visibility
- Role-based private visibility
- Search and filters in admin
- Bulk publish and unpublish where safe
- Deletion confirmation

News should additionally support scheduled publishing and an automatic “New” badge. Private news and projects must require authentication and permission checks. Orders, applications, and training requests should never be hard-deleted during normal admin work; use status changes and archived records.

## 14. Important Technical Gaps

### Critical

- Django content is a Python dictionary, not database content.
- Django Admin is not installed or configured.
- Login and registration are not implemented.
- Public order and training actions do not create records.
- No media upload or file storage exists.
- No service catalogue or customer service-request workflow exists.
- No configurable WhatsApp support button exists.
- No configurable admin email notification workflow exists.
- No detailed activity log or visitor analytics dashboard exists.
- News buttons do not open articles.
- Projects do not have detail pages.
- News has no automatic “New” badge.
- News and projects have no public/private access control.
- The dashboard has no graph-and-statistics-only design.

### High priority

- React contains duplicate fallback content that can become inconsistent with Django.
- The projects page and homepage show different project data.
- Gallery content is based on filenames rather than records.
- Contact information is hard-coded.
- Partner entries have no actual logo uploads.
- `typescript.ignoreBuildErrors` is enabled in `next.config.mjs` and can hide production build errors.

### Production configuration

- Replace the Django development secret.
- Set `DJANGO_DEBUG=false` in production.
- Configure production allowed hosts.
- Configure secure cookies and HTTPS settings.
- Add database backups.
- Add media backups.
- Add email delivery settings.
- Add audit logging for admin changes.
- Configure SMTP or an email delivery provider with retry handling.
- Configure privacy-aware page and service analytics.
- Add rate limiting and spam protection to public forms.

## 15. Recommended Implementation Order

### Phase 1 — Admin foundation

1. Enable Django auth, sessions, messages, static files, and admin.
2. Create database models and migrations.
3. Configure Django Admin roles and permissions.
4. Configure media uploads and image validation.
5. Replace the hard-coded Django content dictionary.
6. Add configurable notification recipients and email delivery records.

### Phase 2 — Managed public content

1. Site settings and contact information
2. News and article pages
3. Projects and project pages
4. Gallery and media library
5. Partner logos
6. Homepage statistics and featured content
7. FAQ and production journey
8. Service catalogue
9. News “New” badge and visibility rules
10. Project public/private visibility rules

### Phase 3 — Customer actions

1. Fingerling order form
2. Training request form
3. Contact enquiry form
4. Email notifications
5. Admin status workflows and CSV exports
6. Registered-customer service requests
7. Floating WhatsApp support with admin-managed number
8. Admin email notifications for every new account, order, and request

### Phase 4 — Accounts and portal

1. Partner application
2. Approval and invitation workflow
3. Login, logout, and password reset
4. Protected partner dashboard
5. Documents and production updates
6. Customer request history and status tracking

### Phase 5 — Production readiness

1. Automated backend and frontend tests
2. Form validation and spam protection
3. Accessibility testing
4. Image optimisation
5. Backup and restore testing
6. Deployment configuration
7. Activity monitoring and error reporting
8. Detailed user and admin activity logs
9. Page and service analytics dashboard
10. Privacy and analytics-retention controls

## 16. Completion Criteria

The admin system is complete when:

- An authorised admin can manage all public content without editing code.
- Admin can upload, reorder, publish, replace, and remove images safely.
- News and projects have individual public pages.
- Recently created news displays an automatic “New” badge.
- News cards use clean light borders and open the article when clicked.
- Project cards open individual project pages when clicked.
- Admin can set news and projects as public or private.
- Private content is limited to authorised signed-in users.
- Dashboard pages contain only graphs, charts, and statistics.
- Forms are placed on separate create and edit pages.
- Fingerling orders are submitted, stored, tracked, and answered.
- Training requests are submitted, stored, scheduled, and completed.
- Customers can register, select a service, submit a request, and track its status.
- Admin can configure the floating WhatsApp number and default message.
- Every new account, order, and request sends an email to admin-configured recipients.
- Admin can review detailed customer, staff, and system activity logs.
- Admin can view visitors, page views, service views, requests, and conversion rates.
- Partner applications can be approved and converted into accounts.
- Login, logout, password reset, and protected portal access work.
- Contact details and footer content are editable in admin.
- React reads live content from Django without duplicate hard-coded records.
- Admin permissions prevent staff from accessing unrelated modules.
- Production settings, backups, tests, and media storage are configured.

## 17. Recommended First Delivery

The first practical delivery should include:

1. Django Admin setup
2. News management
3. Project management
4. Gallery uploads
5. Partner-logo uploads
6. Homepage statistics and FAQ management
7. Fingerling order requests
8. Training requests
9. Site contact settings
10. React API integration for all managed content
11. Service catalogue and registered-customer requests
12. Admin-managed floating WhatsApp support
13. Configurable admin email notifications
14. Detailed activity logs
15. Page and service visitor analytics

This first delivery will remove the main hard-coded content and give staff a usable management system before the more complex partner portal is developed.

python3 -m venv .venv
.venv/bin/pip install -r backend/requirements.txt

cp .env.example .env
set -a
source .env
set +a

pnpm backend:migrate
.venv/bin/python backend/manage.py createsuperuser
pnpm dev:backend