Stick-It is a Flutter app backed by MonaServer, the Go API for Stick-It Map. The app lets users record stickers and street art, share them with groups, and explore them on a map. The server provides the API for authentication, images, groups, rankings, achievements, account workflows, and notifications.
The service uses PostgreSQL with PostGIS and an optional S3-compatible object store, SMTP server, and Firebase Cloud Messaging configuration.
Install the pinned Go tools and run the server checks from the repository root:
mise install
mise run test
mise run buildThe Go module and its detailed setup instructions are in go-server/. The OpenAPI contract is in api/openapi.yaml.
For a production cutover from the Spring deployment, follow the
go-server/MIGRATION.md guide. It covers the one-time
Flyway handoff and keeps the existing PostgreSQL and RustFS data in place.
For a complete local stack, create an ignored .env.dev as described in the Go server guide, then run:
docker compose -f docker-compose.dev.yml up --buildAgents should use docs/AGENT_LOCAL_STACK.md for
the disposable full-stack workflow. It includes a Dockerless native profile
for environments such as this one, where PostgreSQL/PostGIS is available but a
container runtime is not.
The API listens on http://localhost:8080. Its bundled OpenAPI document is available at /public/api-docs, with Swagger UI at /swagger-ui.
For a disposable app test environment with seeded users, groups, pins, likes, and RustFS objects, use the dedicated test stack:
test -f .env.test || cp .env.test.example .env.test
# Replace the placeholder values in .env.test with local-only values.
docker compose --env-file .env.test -f docker-compose.test.yml up --build -d --wait
forattemptin$(seq 1 60);doif curl --fail --silent http://127.0.0.1:8081/public/api-docs >/dev/null;thenbreakfiif [ "$attempt"-eq 60 ];then
docker compose --env-file .env.test -f docker-compose.test.yml logs go-server
exit 1
fi
sleep 1
doneexport TESTDATA_PASSWORD="$(openssl rand -hex 12)"
mise run testdata-seed
set -a
source testdata/.env.test
set +aThe fixture scenarios and ports are documented in
testdata/README.md. Reset the disposable environment
with docker compose --env-file .env.test -f docker-compose.test.yml down -v when a clean dataset
is required.
To work on the Flutter app, install the pinned toolchain and Flutter packages from the repository root:
mise install
mise run flutter-setupRun the app on a connected or emulated device by passing Flutter options after
--:
mise run flutter-run -- -d <device-id>Build the app with:
mise run flutter-build-web
mise run flutter-build-apk
E2E_API_URL=http://127.0.0.1:8081 mise run flutter-verify-webFor local checks:
cd flutter
dart run build_runner build
flutter analyze --no-fatal-infos --no-fatal-warningsThe repository pins Go 1.27.1, Flutter 3.47.2, Node.js 24.20.0, and the API
tooling in mise.toml. The same checks are available from the
repository root as mise run flutter-analyze, mise run flutter-test, and
mise run flutter-api-test; use mise run flutter-build-web for a release web
build. Use mise run flutter-verify-web when a web UI or startup change needs
browser-level validation; the complete workflow is documented in
flutter/AGENTS.md.
The web build uses Flutter's --wasm mode. Flutter emits a Wasm build and a
JavaScript fallback into the same build/web directory, and the generated
flutter_bootstrap.js selects the compatible build at runtime. The deployment
image copies that directory as a whole, so the server does not need brittle
user-agent routing.
The app uses the generated Dart client in flutter/api/. Regenerate it from the shared contract with:
cd flutter
openapi-generator generate -i ../api/openapi.yaml -g dart -o ./apiThe Codemagic Android workflow writes the app's config, restores the Firebase
Android configuration, prepares release signing, builds an Android App Bundle,
and uploads it to Google Play after a push to main. Configure a Codemagic
repository webhook for push events, the android_keystore signing identity,
the GOOGLE_SERVICES and GOOGLE_PLAY_SERVICE_ACCOUNT_CREDENTIALS secrets,
and the app_config environment group before enabling the workflow.
flutter/: Flutter app, platform projects, assets, and generated Dart API clientflutter/e2e/: Playwright tests and MCP browser configuration for Flutter webtestdata/: disposable integration stack, fixture scenarios, and seed commanddocs/AGENT_LOCAL_STACK.md: agent runbook for Compose and Dockerless local servicesgo-server/: server module, database migrations, tests, and container imageapi/: OpenAPI sources and bundled contractdocker-compose.dev.yml: local PostGIS, object storage, and server stackdocker-compose.yml: deployment stackcodemagic.yaml: mobile release workflowmise.toml: pinned development tools and tasks
See LICENSE.