A premium South African technology marketplace organized around five curated collections: Study, Create, Build, Focus, and Travel. · Built with Manus
Technology, intelligently curated.
# NEXUS
NEXUS is a premium South African technology marketplace for considered tools across five collections: **Study, Create, Build, Focus, and Travel**. It includes a React storefront, separate Angular companion, Expo Go mobile app, and shared Express/MySQL-compatible backend with authentication, catalogue data, stock-aware orders, and protected operations.
## Project map
| Area | Location | Purpose |
|---|---|---|
| React storefront | `client/` | Editorial web shopping experience |
| Angular companion | `frontend/` | Bootstrap web implementation |
| Expo Go app | `mobile/` | Home, Categories, Cart, Profile, and product detail |
| Backend deliverable | `backend/` + `server/` | Assignment mapping plus executable Express/tRPC runtime |
| Database | `drizzle/` | MySQL-compatible schema and migrations |
| Documentation | `docs/`, `ASSIGNMENT_DELIVERABLES.md` | Assignment support material and diagrams |
## Run locally in VS Code
From the repository root:
```bash
npm install
npm run dev
```
Run Angular separately:
```bash
cd frontend
npm install
npm start
```
Run Expo Go on a phone connected to the same Wi-Fi network:
```bash
cd mobile
npm install
npm run start:lan
```
Set `EXPO_PUBLIC_API_URL` to the computer's LAN address, such as `
192.168.1.20`; do not use `localhost` on a physical phone. If LAN scanning is blocked, use `npm run start:tunnel`.
## Access and administration
Users must sign in or register before purchasing. The public storefront does not show an Admin link. Authorized administrators can open the protected `/admin` route directly; Angular and Expo apply the same role check in their private workspace surfaces.
Promote an existing account in MySQL Workbench with:
```sql
UPDATE users
SET role = 'admin'
WHERE email = 'your-email@example.com';
```
Sign in again after changing the role. Stock confirmation writes the selected value to the database, and recent orders are displayed from the pers …