48 lines
1.3 KiB
Markdown
48 lines
1.3 KiB
Markdown
# ETF Oglasi
|
|
|
|
<img src="logo.png" alt="ETF Oglasi logo" width="150" />
|
|
|
|
A hobby full-stack project I built to learn modern app development end to end.
|
|
|
|
It scrapes the announcement boards of the Faculty of Electrical Engineering,
|
|
University of Banja Luka, stores the announcements in PostgreSQL, and lets
|
|
students browse and subscribe to subjects from a mobile app. Subscribers get
|
|
push notifications when new announcements are posted.
|
|
|
|
## Tech Stack
|
|
|
|
- **Backend:** Spring Boot 3.5 (Java 21), REST API, PostgreSQL
|
|
- **Frontend:** React Native / Expo (Expo Router, NativeWind)
|
|
- **Notifications:** Firebase Cloud Messaging
|
|
- **Tooling:** Docker, Gitea Actions for CI/CD, deployed to a self-hosted home server
|
|
|
|
## Project Structure
|
|
|
|
- `backend/` — Spring Boot REST API and the scraper
|
|
- `frontend/` — Expo mobile app
|
|
|
|
## Backend
|
|
|
|
```bash
|
|
cd backend
|
|
cp src/main/resources/application.properties.example src/main/resources/application.properties # fill in datasource + jwt.secret
|
|
docker compose up -d # local Postgres
|
|
./gradlew bootRun
|
|
```
|
|
|
|
Run tests: `./gradlew test`
|
|
|
|
## Frontend
|
|
|
|
```bash
|
|
cd frontend
|
|
npm install
|
|
# set EXPO_PUBLIC_API_URL in .env to the backend base URL
|
|
npm start
|
|
```
|
|
|
|
## Status
|
|
|
|
Semi-actively developed as a learning project. It is an app I actually use, and
|
|
maybe others will find it useful too.
|