MVP доски объявлений с категориями, созданием и просмотром объявлений, поиском/фильтрацией. Монорепа с FastAPI-бэкендом (SQLite) и React-фронтендом (CRA + TypeScript).
/
├── backend/ # FastAPI backend (SQLite + SQLAlchemy)
│ ├── main.py
│ ├── database.py
│ ├── models.py
│ ├── schemas.py
│ ├── routers/
│ │ ├── bulletins.py
│ │ └── categories.py
│ └── requirements.txt
└── frontend/ # React + TypeScript (CRA)
├── public/
├── src/
│ ├── api/
│ │ └── api.ts # API client (fetch-based)
│ ├── components/
│ │ ├── Header.tsx # Navigation header
│ │ ├── CategoryFilter.tsx # Category dropdown filter
│ │ ├── BulletinCard.tsx # Bulletin card for listing
│ │ ├── BulletinList.tsx # Bulletin list with search/filter
│ │ ├── BulletinDetail.tsx # Full bulletin details
│ │ └── BulletinForm.tsx # Bulletin creation form
│ ├── pages/
│ │ ├── HomePage.tsx # Main listing page
│ │ ├── CreatePage.tsx # Bulletin creation page
│ │ └── DetailPage.tsx # Bulletin detail page
│ ├── types.ts # TypeScript interfaces
│ ├── App.tsx # Root component with routing
│ ├── App.css # Application styles
│ └── index.tsx # Entry point
├── package.json
└── README.md # CRA-generated docs
cd backend
pip install -r requirements.txt
uvicorn main:app --reload --port 8000API will be available at http://localhost:8000/api. Swagger docs at http://localhost:8000/docs.
cd frontend
npm install
npm startApp will be available at http://localhost:3000.
| Method | Path | Description |
|---|---|---|
| GET | /api/categories |
List all categories |
| POST | /api/categories |
Create a category |
| GET | /api/bulletins |
List bulletins (filters: category_id, search) |
| GET | /api/bulletins/{id} |
Get bulletin details |
| POST | /api/bulletins |
Create a bulletin |
- Backend: FastAPI, SQLAlchemy, SQLite, Pydantic v2
- Frontend: React 19, TypeScript, React Router v6, CSS