# go-first > **URPI** — Web Application & Backend Development Experts > Live at: [https://www.urpi.be](https://www.urpi.be) | | | | --- | --- | | Module | github.com/dnoulet/go-first · go 1.23 · 12 Go files | | Endpoints | 0 endpoints | | Components | 0 component directories | | Tests | none detected | | Go lines | 1383 lines | > Everything between the generated markers is rewritten by every sync. Notes written outside the markers are kept. ## For Users ### What this application does > **URPI** — Web Application & Backend Development Experts > Live at: [https://www.urpi.be](https://www.urpi.be) The project ships its own README at `README.md`, which is the long form of this page. The three audience tabs split the same facts three ways so you only read the part that concerns you. ### Reading this in go-doc Open the page and pick the tab that matches you: - **User** — you use the finished application. This section is all you need. - **Operator** — you run it. Configuration, ports and deployment notes are under that tab. - **Developer** — you integrate with it or change it. The API and layout tables are under that tab. The feedback panel stores a note per audience, tagged with your badge, so operators and developers can see which audience raised it. ### Where the original documentation lives This project already carries 4 Markdown documents. They stay in the project repository: this page points at them instead of copying them, so there is always exactly one copy of the truth. | Document | Size | | --- | --- | | `README.md` | 9681 bytes | | `docs/API.md` | 8052 bytes | | `docs/DEPLOYMENT.md` | 9465 bytes | | `docs/DEVELOPMENT.md` | 11918 bytes | --- ## For Operators ### Running it locally The root Makefile defines 30 targets: - `make build-backend` - `make build-frontend` - `make cert-renew` - `make cert-status` - `make check-deps` - `make ci-build` - `make ci-install` - `make ci-test` - `make clean-all` - `make db-migrate-create` - `make db-migrate-down` - `make db-migrate-up` - `make deploy-staging` - `make dev-backend` - `make dev-frontend` - `make generate` - `make install` - `make lint-backend` - `make lint-frontend` - `make logs` - `make release-major` - `make release-minor` - `make release-patch` - `make restart` - `make start` - `make status` - `make stop` - `make test-backend` - `make test-frontend` - `make version` ### Local containers The compose file defines these services: | Service | Image | Published ports | | --- | --- | --- | | app | built locally | internal only | | postgres | `postgres:16-alpine` | internal only | | redis | `redis:7-alpine` | internal only | | nginx | `nginx:alpine` | internal only | ### Image `Dockerfile` builds from `golang:1.23-alpine`, `node:20-alpine`, `alpine:3.20` in stages: backend-builder, frontend-builder and exposes 8080. ### Configuration Every environment variable found in the source or in a `.env` file: | Variable | Example | Found in | | --- | --- | --- | | `CORS_ALLOWED_ORIGINS` | `http://localhost:3000,http://localhost:5173,http://127.0.0.1:3000,http://127.0.0.1:5173` | .env file | | `DATABASE_HOST` | `localhost` | .env file | | `DATABASE_NAME` | `go_first_dev` | .env file | | `DATABASE_PASSWORD` | `postgres` | .env file | | `DATABASE_PORT` | `5432` | .env file | | `DATABASE_SSL_MODE` | `disable` | .env file | | `DATABASE_USER` | `postgres` | .env file | | `EMAIL_FROM_ADDRESS` | `noreply@localhost` | .env file | | `EMAIL_FROM_NAME` | `URPI Local` | .env file | | `EMAIL_PASSWORD` | — | .env file | | `EMAIL_SMTP_HOST` | — | .env file | | `EMAIL_SMTP_PORT` | `587` | .env file | | `EMAIL_USERNAME` | — | .env file | | `FRONTEND_BUILD_PATH` | `./web/dist` | .env file | | `FRONTEND_SPA_FALLBACK` | `true` | .env file | | `JWT_EXPIRES_IN` | `24` | .env file | | `JWT_REFRESH_EXPIRES_IN` | `168` | .env file | | `JWT_SECRET` | `local_development_secret_key_change_in_production` | .env file | | `LOGGING_FORMAT` | `console` | .env file | | `LOGGING_LEVEL` | `debug` | .env file | | `LOGGING_OUTPUT` | `stdout` | .env file | | `REDIS_DB` | `0` | .env file | | `REDIS_HOST` | `localhost` | .env file | | `REDIS_PASSWORD` | — | .env file | | `REDIS_PORT` | `6379` | .env file | | `SERVER_HOST` | `0.0.0.0` | .env file | | `SERVER_MODE` | `debug` | .env file | | `SERVER_PORT` | `8080` | .env file | ### Network surface Ports referenced across the project: `5432`, `8080`. ### Deployment artefacts No Helm chart was found, so deployment is expected to be plain Docker or a managed platform. ### Operations documentation that already exists Read these in place rather than duplicating them here: - `docs/DEPLOYMENT.md` — Deployment Guide — go-first / URPI > No HTTP route registrations were detected. If this is a server, the API table is incomplete — check for routes built dynamically. --- ## For Developers ### Module layout - go.mod — module github.com/dnoulet/go-first, go 1.23, 5 direct and 26 indirect dependencies ### HTTP API No route registrations were detected, which is expected for a CLI, a library or a worker. ### Direct dependencies - `github.com/gin-gonic/gin` v1.10.0 - `github.com/google/uuid` v1.6.0 - `github.com/joho/godotenv` v1.5.1 - `github.com/rs/zerolog` v1.33.0 - `gopkg.in/yaml.v3` v3.0.1 ### Directory map | Directory | Files | Lines | Likely purpose | | --- | --- | --- | --- | | `web/` | 37 | 2366 | frontend assets | | `internal/` | 11 | 1266 | unimportable application internals | | `docs/` | 3 | 0 | project documentation | | `deploy/` | 2 | 316 | deployment manifests | | `cmd/` | 1 | 117 | binary entry points | ### Languages - **JSON** — 4 files, 6107 lines - **TypeScript** — 27 files, 2262 lines - **Markdown** — 4 files, 1784 lines - **Go** — 12 files, 1383 lines - **YAML** — 4 files, 540 lines - **out** — 1 file, 354 lines - **conf** — 1 file, 185 lines - **CSS** — 1 file, 161 lines - **Shell** — 1 file, 131 lines - **JavaScript** — 2 files, 94 lines ### Developer documentation that already exists - `docs/API.md` — API Documentation — go-first / URPI - `docs/DEVELOPMENT.md` — Development Guide — go-first / URPI