Developer FAQ

Answers to the most common questions about installing, configuring, and developing with Synaplan.


Installation

How do I install Synaplan?

Clone the repository and start the Docker services:

git clone https://github.com/metadist/synaplan.git
cd synaplan
docker compose up -d

Open http://localhost:5173 — the app should be ready in about 2 minutes.

What are the install options?

Mode Command Size Best For
Standard docker compose up -d ~9 GB Full features including local AI (Ollama)
Minimal docker compose -f docker-compose-minimal.yml up -d ~5 GB Cloud AI only (no Ollama)

The minimal install skips the Ollama container and is ideal if you only plan to use cloud providers like OpenAI, Anthropic, Groq, or Google Gemini.

What are the default login credentials?

Email Password Level
[email protected] admin123 ADMIN
[email protected] demo123 PRO
[email protected] test123 NEW (unverified)

What services are available after startup?

Service URL
App (Vue SPA) http://localhost:5173
API (Symfony) http://localhost:8000
API Docs (Swagger) http://localhost:8000/api/doc
phpMyAdmin http://localhost:8082
MailHog (email testing) http://localhost:8025

Configuration & the .env File

What is the .env file?

The file backend/.env is where all Synaplan configuration lives. It controls database connections, AI provider API keys, email settings, authentication, and more.

A fully documented template is provided at backend/.env.example. To get started:

cp backend/.env.example backend/.env

Then edit backend/.env with your own values. The file is git-ignored, so your credentials stay local.

What are the main sections in .env?

Section Key Variables Purpose
Application APP_SECRET, FRONTEND_URL, APP_URL Core app settings, URLs
AI Services OLLAMA_BASE_URL, OPENAI_API_KEY, ANTHROPIC_API_KEY, GROQ_API_KEY, GOOGLE_GEMINI_API_KEY AI provider connections
Database DATABASE_WRITE_URL, DATABASE_READ_URL MariaDB connection strings
Email MAILER_DSN, APP_SENDER_EMAIL Outgoing email transport
Auth reCAPTCHA, OAuth (Google/GitHub), OIDC Login and registration settings
Channels WhatsApp, Gmail External messaging integrations
Vector DB QDRANT_URL Qdrant vector database for RAG and memories
Payments STRIPE_* Stripe subscription management

Do I need to set all variables?

No. The only things required for a working local install are the defaults already in .env.example. Everything else is opt-in — add API keys for the providers you want to use, and leave the rest empty.


Adding Your Own API Keys

How do I add an OpenAI key?

Edit backend/.env and set:

OPENAI_API_KEY=sk-your-openai-key-here

Then restart the backend:

docker compose restart backend

GPT-5.4, GPT-4.1, o4-mini, and DALL-E 3 will become available in the model selector.

How do I add an Anthropic key?

ANTHROPIC_API_KEY=sk-ant-your-anthropic-key-here

Restart the backend. Claude Sonnet 4, Claude Haiku 3.5, and other Anthropic models will appear.

How do I add a Groq key?

GROQ_API_KEY=gsk_your-groq-key-here

Groq provides ultra-fast inference for open-source models like Llama 4 Scout and Mistral.

How do I add a Google Gemini key?

GOOGLE_GEMINI_API_KEY=your-gemini-key-here

Enables Gemini 2.5 Pro, Gemini 2.5 Flash, and other Google models.

How do I use Ollama (local models)?

Ollama runs as a Docker service in the standard install — no API key needed. It's available at http://ollama:11435 inside the Docker network.

To change the Ollama URL (e.g., if running Ollama on the host):

OLLAMA_BASE_URL=http://host.docker.internal:11434

Models are downloaded automatically when first selected. You can also pre-pull models:

docker compose exec ollama ollama pull llama3.3

Can I use multiple providers at the same time?

Yes. Set as many API keys as you like. Each user can choose their preferred model per task (chat, vision, embeddings, image generation) in the admin panel under System Config → AI Models.


Docker & Development

How do I view logs?

docker compose logs -f backend     # Backend logs
docker compose logs -f frontend    # Frontend dev server
docker compose logs -f             # All services

How do I restart a service?

docker compose restart backend
docker compose restart frontend

How do I reset the database?

docker compose down -v    # Removes all volumes (data)
docker compose up -d      # Fresh start with seed data

How do I run tests?

make test                          # All tests (backend + frontend)
make -C backend test               # Backend only (PHPUnit)
make -C frontend test              # Frontend only (Vitest)

How do I run linting and static analysis?

make lint                          # Backend + frontend lint
make -C backend phpstan            # PHP static analysis
docker compose exec -T frontend npm run check:types   # TypeScript check

How do I build the frontend for production?

make -C frontend build             # Build the Vue SPA
make -C frontend build-widget      # Build the embeddable widget

Qdrant & Vector Search

What is Qdrant used for?

Qdrant is a vector database that powers three features:

  1. RAG Document Search — Semantic search over indexed documents
  2. AI Memories — User profiling and long-term context
  3. Feedback System — False-positive detection and learning

Do I need Qdrant?

No. Qdrant starts automatically with docker compose up -d, but Synaplan works fully without it. If Qdrant is unavailable, memories and vector search are simply disabled. MariaDB VECTOR can serve as an alternative for basic vector operations.


Common Issues

Problem Cause Solution
AUTH_FAILED from API Wrong auth header format Use X-API-Key: ... header, not Authorization: Bearer
Models not appearing Missing API key Add the provider's key to backend/.env and restart
Ollama models slow to start First download in progress Wait for the model to download, check logs with docker compose logs ollama
Frontend not loading Vite dev server not ready Wait ~30 seconds, or check docker compose logs frontend
Database connection refused MariaDB not yet started Wait for all services: docker compose up -d && sleep 10
Widget CORS errors Cross-origin not configured Widget handles CORS automatically; check your APP_URL matches the actual host

Project Structure

synaplan/
├── backend/          # Symfony 7 PHP API
│   ├── src/          # Controllers, Services, Repositories
│   ├── .env.example  # Configuration template
│   └── tests/        # PHPUnit tests
├── frontend/         # Vue 3 + TypeScript SPA
│   ├── src/          # Components, stores, services
│   └── tests/        # Vitest tests
├── docs/             # Internal documentation
├── _docker/          # Docker build configs
└── plugins/          # Plugin system (SortX, etc.)

More Resources