Thank you for contributing to Fashio. This document outlines the development standards, workspace architecture, issue tracking protocol, and pull request workflow required for maintaining a structured open-source codebase.
- Code of Conduct
- Monorepo Architecture & Rules
- Functional Team Clusters
- Issue Labeling Strategy
- Development Environment Setup
- Branching & Development Workflow
- Coding & Quality Verification
- Commit Message Specification
- Submitting a Pull Request
- Milestone Roadmap Summary
All contributors are expected to uphold a professional, respectful, and inclusive environment. Discriminatory behavior, harassment, or non-constructive communication will not be tolerated.
The project operates as a decoupled monorepo containing a Django REST Framework backend managed by uv and a React frontend built with Vite.
fashio/
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── workflows/
│ │ ├── backend-ci.yml
│ │ └── frontend-ci.yml
│ └── PULL_REQUEST_TEMPLATE.md
│
├── backend/ # Django REST Framework application (managed by uv)
│ ├── .python-version # Python version pinned by uv
│ ├── pyproject.toml # Dependencies and tool settings managed by uv
│ ├── uv.lock # Deterministic dependency lockfile
│ ├── Dockerfile
│ ├── manage.py
│ ├── config/ # Core Django settings and URLs
│ │ ├── __init__.py
│ │ ├── asgi.py
│ │ ├── urls.py
│ │ ├── wsgi.py
│ │ └── settings/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── local.py
│ │ └── prod.py
│ └── apps/ # Modular Django domain applications
│ ├── __init__.py
│ ├── authentication/
│ ├── catalog/
│ ├── orders/
│ ├── profiles/
│ └── sellers/
│
├── frontend/ # React single-page application (Vite)
│ ├── .eslintrc.cjs
│ ├── .prettierrc
│ ├── package.json
│ ├── vite.config.js
│ ├── Dockerfile
│ └── src/
│ ├── components/ # Reusable UI primitives (Buttons, Modals)
│ ├── context/ # React Context providers
│ ├── features/ # Domain-specific UI and state logic
│ │ ├── auth/
│ │ ├── catalog/
│ │ ├── cart/
│ │ └── checkout/
│ ├── layouts/ # Page shell layouts
│ ├── pages/ # Route views
│ ├── services/ # API interaction layer
│ └── store/ # State management store
│
├── compose.yml # Container orchestration specification
├── .env.example
├── ARCHITECTURE.md
├── CONTRIBUTING.md
└── README.md
- Backend Environment (
uv): All Python interactions must useuv. Dependencies are synced viauv sync, and scripts/management commands must execute usinguv run python manage.py <command>. - Modular Django Apps: All domain logic resides inside
/backend/apps/. The settings configuration inserts/backend/apps/intosys.pathto permit direct application imports (e.g.,from catalog.models import Product). - Modular Settings: Environment configuration is divided within
config/settings/(base.py,local.py,prod.py) usingdjango-environfor secret isolation. - Frontend Component Architecture: Primitive, generic UI components belong in
src/components/, while domain-specific state, API service calls, and sub-views must be placed insidesrc/features/<domain>/.
To avoid merge bottlenecks across contributor teams, tasks are organized into three primary functional domain clusters:
- Cluster A (Core & Identity): Covers Milestone 0 (Infrastructure), Milestone 1 (Auth & Identity), and Milestone 6 (Customer Profiles & History).
- Cluster B (Catalog & Vendor Engine): Covers Milestone 2 (Catalog & Product Engine), Milestone 3 (Seller/Vendor Management), and Milestone 7 (Global UI Navigation & Search).
- Cluster C (Commerce & Operations): Covers Milestone 4 (Cart & Wishlist), Milestone 5 (Checkout & Orders), and Milestone 8 (Security, Hardening & Launch).
All backlog tasks and pull requests must be classified using three label categories:
layer:backend/drflayer:frontend/reactlayer:databaselayer:devopslayer:docslayer:design/ui
type:feattype:fixtype:refactortype:testtype:security
good-first-issue(1–2 Story Points)complexity:medium(3–5 Story Points)complexity:complex(8+ Story Points)
- Python >= 3.12
- uv package manager
- Node.js >= 20.0.0
- Podman / Docker Engine with Compose support
- Fork the repository on GitHub and clone your fork locally:
git clone [https://github.com/YOUR_USERNAME/Fashio.git](https://github.com/YOUR_USERNAME/Fashio.git)
cd Fashio- Configure the upstream remote repository:
git remote add upstream [https://github.com/ORIGINAL_OWNER/Fashio.git](https://github.com/ORIGINAL_OWNER/Fashio.git)- Initialize environment configuration:
cp .env.example .env- Launch the local container environment using Podman or Docker:
# Using Podman
podman compose up --build
# Using Docker
docker compose up --buildApplication addresses:
- Backend API:
http://localhost:8000 - Frontend Application:
http://localhost:5173 - PostgreSQL Database:
localhost:5432
Do not commit directly to main or dev. All work must occur on dedicated feature branches.
- Fetch and rebase against upstream tracking branch:
git fetch upstream
git checkout -b <type>/<short-description> upstream/main- Keep branches small and focused on a single issue.
feat/- New functionalityfix/- Bug fixesdocs/- Documentation modificationsrefactor/- Code changes that do not alter behaviortest/- Adding or updating test suitesci/- Pipeline configuration changes
Before committing, run local verification checks.
cd backend
# Sync environment
uv sync
# Static analysis and linting
uv run ruff check .
# Validate formatting
uv run ruff format --check .
# Execute test suite
uv run pytestAutomated code formatting can be applied using:
uv run ruff format .
cd frontend
# Install dependencies
npm install
# Run linter
npm run lint
# Validate production build compilation
npm run buildCommits must conform to the Conventional Commits specification:
<type>(<scope>): <short message>
[optional detailed description]
[optional issue reference]
feat: A new feature implementationfix: A bug resolutiondocs: Documentation-only updatesstyle: White-space, formatting, or missing semi-colon fixesrefactor: Code restructures that do not alter public API behaviorperf: Performance optimizationstest: Adding or correcting testschore: Build process or tooling updates
feat(auth): implement Google OAuth2 token exchange endpoint
Integrate ID token validation flow for frontend authentication calls.
Includes unit test coverage for user creation and JWT pair issuance.
Closes #19
- Rebase your feature branch onto the latest upstream branch:
git fetch upstream
git rebase upstream/main
- Push your topic branch to your fork:
git push -u origin <type>/<short-description>
- Open a Pull Request on GitHub against the target branch (
mainordev). - Ensure your PR description clearly states:
- The issue being addressed.
- A summary of technical changes.
- Steps required to manually verify the implementation.
- Verify that all GitHub Actions CI status checks pass cleanly.
The roadmap is structured into 8 sequential milestones containing granular implementation tasks:
-
Milestone 0: Environment, CI/CD & Architecture Setup: Repository initialization, containerization, quality pipelines, and project documentation.
-
Milestone 1: Authentication & Identity Management: JWT pair issuance, registration, password recovery, and Google/GitHub OAuth integrations.
-
Milestone 2: Catalog, Categories & Product Engine: Hierarchical categories (
mptt), product models, full-text search, filtering, and catalog UI. -
Milestone 3: Seller Management & Vendor System: Vendor profiles, seller authorization rules (
IsSeller), and product management dashboards. -
Milestone 4: Cart & Wishlist System: Session-based and persistent user carts, cart synchronization, and wishlist persistence.
-
Milestone 5: Checkout Engine & Order Flow: Atomic order transactions, inventory locking, state transitions, and payment processing integrations.
-
Milestone 6: Customer Profile, Reviews & History: User settings, address management, order history, and verified purchase product reviews.
-
Milestone 7: Global UI Navigation, Search & Layout: App layout shells, debounced global search, toast notifications, and responsive navigation.
-
Milestone 8: Hardening, Security, Performance & Launch: DRF throttling, database indexing, OpenAPI documentation generation, and E2E testing.