# Project Setup & Local Development
## Tech Stack
| Layer | Technology |
| --------- | -------------------- |
| Front‑end | **React JS** |
| Back‑end | **Node JS** |
| Database | **PostgreSQL** |
| Container | **Docker & Compose** |
---
## 1 — Run Locally (without Docker)
### 1.1 Backend
```bash
cd backend
# install dependencies
yarn install
```
\#### Configure PostgreSQL
macOS
```bash
brew install postgres
```
Ubuntu
```bash
sudo apt update
sudo apt install postgresql postgresql-contrib
```
\##### Create DB & Admin User
```bash
# log in as default super‑user
psql postgres -U postgres
-- inside psql
CREATE ROLE admin WITH LOGIN PASSWORD 'admin_pass';
ALTER ROLE admin CREATEDB;
\q
# log in as the new user
psql postgres -U admin
-- inside psql
CREATE DATABASE db_;
GRANT ALL PRIVILEGES ON DATABASE db_ TO admin;
\q
```
\##### Migrate & Start
```bash
yarn db:create # generate schema
yarn start # production build
```
### 1.2 Frontend
```bash
cd frontend
yarn install
yarn start
```
> Front‑end dev‑server runs at **[http://localhost:3000](http://localhost:3000)** by default.
---
## 2 — Run with Docker
```bash
cd docker
chmod +x wait-for-it.sh start-backend.sh
```
| Scenario | Command |
| ------------------------- | ---------------------------------- |
| **Fresh DB volume** | `rm -rf data && docker-compose up` |
| **Reuse existing volume** | `docker-compose up` |
Then open **[http://localhost:3000](http://localhost:3000)**.
Stop services with **Ctrl + C** or:
```bash
docker-compose down
```
> **Heads‑up:** Files inside the `docker/` folder and the root `Dockerfile` are used for cloud deployment. Changing them may break the pipeline.
---
## Folder Structure (top‑level)
```text
├── backend/ # Node JS API & services
├── frontend/ # React application
├── docker/ # Compose files & helper scripts
└── README.md # (this file)
```
---
## Troubleshooting
### “connection refused”
1. Port closed or backlog full.
2. Firewall (local or network).
3. Service not running.
Verify with:
```bash
telnet
```
### macOS
```bash
sudo service ssh status
```
### Ubuntu – IP conflict check
```bash
arp-scan -I eth0 -l | grep
arping
```
### Reset PostgreSQL schema (macOS example)
```sql
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
```
---
## Cheat‑sheet
| Task | Command |
| ----------------------- | ---------------------------------- |
| **Create DB schema** | `yarn db:create` |
| **Start backend** | `yarn start` |
| **Start dev front‑end** | `cd frontend && yarn start` |
| **Compose up (fresh)** | `rm -rf data && docker-compose up` |
| **Compose down** | `docker-compose down` |
---
Made with ❤️ by Flatlogic Platform.