Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Andr21Da16/Quikko/llms.txt

Use this file to discover all available pages before exploring further.

Quikko is designed for containerized production deployments. The Go backend ships with a multi-stage Dockerfile that produces a small, self-contained binary image based on Alpine Linux. The Next.js frontend deploys to Vercel or any Node-capable host. A reverse proxy — nginx, Caddy, or a cloud load balancer — sits in front of both, handling TLS termination and routing.

Dockerfile

server/Dockerfile
FROM golang:1.26.4 AS builder

WORKDIR /app

COPY go.mod go.sum ./
RUN go mod download

COPY . .

RUN CGO_ENABLED=0 GOOS=linux go build -o server ./cmd/api

FROM alpine:latest

WORKDIR /app

COPY --from=builder /app/server .

COPY docs ./docs
COPY data ./data

EXPOSE 8080

CMD ["./server"]
The build uses a two-stage pipeline: the builder stage compiles a fully static binary with CGO_ENABLED=0, and the final stage copies only the binary, the OpenAPI docs, and any required data files into a minimal Alpine image. The result is an image that is small and contains no Go toolchain at runtime.

Building the Docker image

cd server
docker build -t quikko-server .

Running the container

Pass all required environment variables with -e flags or via an --env-file. At minimum you must supply MONGO_URI and JWT_SECRET — the server will exit immediately without them. INFLUX_TOKEN is not enforced at startup but is required for analytics to function; always provide it in production.
docker run -p 8080:8080 \
  -e MONGO_URI=mongodb+srv://... \
  -e INFLUX_TOKEN=... \
  -e JWT_SECRET=... \
  -e BASE_URL=https://yourdomain.com \
  -e FRONTEND_URL=https://app.yourdomain.com \
  -e ALLOWED_ORIGINS=https://app.yourdomain.com \
  quikko-server
Never set ENV=development in production. Development mode changes logging behavior — structured JSON logs are replaced with human-readable output that is unsuitable for log aggregation pipelines. Always set ENV=production in deployed environments.
A typical Quikko production stack looks like this:
Internet


Reverse Proxy (nginx / Caddy / cloud LB)

    ├── Frontend  (Vercel / Next.js)

    └── Backend   (Docker container / Railway)

              ┌────────┼────────┐
              ▼        ▼        ▼
           MongoDB   Redis   InfluxDB

MongoDB

Use MongoDB Atlas for a fully managed experience, or self-host MongoDB with a replica set for high availability. Provide the connection string via MONGO_URI.

Redis

Upstash (serverless, generous free tier), Railway Redis, or a self-hosted Redis instance. Set REDIS_ADDR and optionally REDIS_PASSWORD.

InfluxDB

InfluxDB Cloud for a managed time-series database, or self-host InfluxDB 2.x. Supply the URL, token, org, and bucket via the INFLUX_* variables.

Deployment platforms

The backend container runs on any Docker-capable host. Common choices used for Quikko deployments:

Railway

Connects directly to your GitHub repository and redeploys on every push to main. Add environment variables in the Railway dashboard under the service settings. No Docker registry required.

VPS with Docker

Suitable for DigitalOcean Droplets, Hetzner Cloud, Contabo, or any Linux VPS. Install Docker, pull or build the image, and run it with a docker run or docker compose command.

Health check

The server exposes a lightweight health endpoint suitable for readiness and liveness probes:
curl https://yourdomain.com/health
{ "status": "ok" }
Configure your reverse proxy, load balancer, or container orchestrator to poll GET /health to determine when the container is ready to receive traffic.

Key production environment variables

The following variables must be set correctly before going live. See Environment Variables for the full reference including defaults for every variable.
BASE_URL
string
required
Your public short-link domain, e.g. https://sho.rt. This value is embedded in every shortened URL returned to clients — set it before creating any links.
FRONTEND_URL
string
required
Your frontend domain, e.g. https://app.yourdomain.com. The backend redirects 404 and 410 errors here so users see a branded page instead of raw JSON.
ALLOWED_ORIGINS
string
required
Your frontend domain for CORS, e.g. https://app.yourdomain.com. Comma-separate multiple origins if needed. Never use *.
JWT_SECRET
string
required
A long random secret used to sign all JWTs. Generate one with openssl rand -hex 32 and store it in your secrets manager.
ENV
string
default:"development"
Set to production in all deployed environments to enable structured JSON logging and production-appropriate error handling.
The live Quikko demo backend at quikko-production.up.railway.app is deployed on Railway from the main branch automatically on every push — making Railway the fastest path to a live deployment if you want to follow the same setup.

Build docs developers (and LLMs) love