{"id":28718839,"url":"https://github.com/xdanielsb/survey-app","last_synced_at":"2026-04-14T19:31:38.473Z","repository":{"id":299072815,"uuid":"980221979","full_name":"xdanielsb/survey-app","owner":"xdanielsb","description":"Cloud‑native survey engine with end‑to‑end observability.","archived":false,"fork":false,"pushed_at":"2025-07-28T06:22:47.000Z","size":2661,"stargazers_count":0,"open_issues_count":14,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-30T10:00:36.512Z","etag":null,"topics":["auth","cd","ci","coverage-report","database-backup","database-migrations","docker-compose","elk","flyway","grafana","periodic-backups","prometheus","spring-boot","sso-authentication","stripe-payments","vuejs"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xdanielsb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-08T19:12:33.000Z","updated_at":"2025-07-14T08:11:08.000Z","dependencies_parsed_at":"2025-07-14T09:28:28.462Z","dependency_job_id":"56c2d645-5d69-4353-ace7-72bdf38c6207","html_url":"https://github.com/xdanielsb/survey-app","commit_stats":null,"previous_names":["xdanielsb/survey-app"],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/xdanielsb/survey-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xdanielsb%2Fsurvey-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xdanielsb%2Fsurvey-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xdanielsb%2Fsurvey-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xdanielsb%2Fsurvey-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xdanielsb","download_url":"https://codeload.github.com/xdanielsb/survey-app/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xdanielsb%2Fsurvey-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31812968,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auth","cd","ci","coverage-report","database-backup","database-migrations","docker-compose","elk","flyway","grafana","periodic-backups","prometheus","spring-boot","sso-authentication","stripe-payments","vuejs"],"created_at":"2025-06-15T05:04:50.898Z","updated_at":"2026-04-14T19:31:38.459Z","avatar_url":"https://github.com/xdanielsb.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Survey \n\n_Cloud‑native survey engine with end‑to‑end observability._\n\n![Backend CI](https://github.com/xdanielsb/survey-app/actions/workflows/ci-backend.yml/badge.svg)\n![Frontend CI](https://github.com/xdanielsb/survey-app/actions/workflows/ci-frontend.yml/badge.svg)\n![Analytics CI](https://github.com/xdanielsb/survey-app/actions/workflows/ci-analytics.yml/badge.svg)\n![Backoffice CI](https://github.com/xdanielsb/survey-app/actions/workflows/ci-backoffice.yml/badge.svg)\n[![Frontend Coverage](https://img.shields.io/codecov/c/github/xdanielsb/survey-app?flag=frontend\u0026label=frontend%20coverage\u0026branch=master)](https://app.codecov.io/gh/xdanielsb/survey-app/flags/frontend)\n[![Backend Coverage](https://img.shields.io/codecov/c/github/xdanielsb/survey-app?flag=backend\u0026label=backend%20coverage\u0026branch=master)](https://app.codecov.io/gh/xdanielsb/survey-app/flags/backend)\n[![Analytics Coverage](https://img.shields.io/codecov/c/github/xdanielsb/survey-app?flag=analytics\u0026label=analytics%20coverage\u0026branch=master)](https://app.codecov.io/gh/xdanielsb/survey-app/flags/analytics)\n[![Backoffice Coverage](https://img.shields.io/codecov/c/github/xdanielsb/survey-app?flag=backoffice\u0026label=backoffice%20coverage\u0026branch=master)](https://app.codecov.io/gh/xdanielsb/survey-app/flags/backoffice)\n![License](https://img.shields.io/github/license/xdanielsb/survey-app)\n![Release](https://img.shields.io/github/v/tag/xdanielsb/survey-app)\n\n## Key Features\n\n-  **Seamless CI / CD** | Independent pipelines for UI \u0026 API, auto‑promote from staging to prod \n-  **Security** | Keycloak, Google Sign-in  JWT gateway, api routes protected, secure cookies\n-  **Keycloak** | Multi-realm configuration (production, staging, development)\n-  **Security scanning** | OWASP Dependency Check and npm audit via GitHub Actions\n-  **RateLimiter** | Bucket4J\n-  **Data Layer** PostgreSQL, Flyway to versioned schema migrations\n-  **Periodic backups \u0026 Database Recovery** with [PatronX](https://github.com/xdanielsb/patronx)\n-  **List backups** `make list-backups` via PatronX\n-  **Remote asset store** | Upload backups to S3 using PatronX \n-  **Instrumentation**| Sentry frontend, backend, analytics, sentry (error tracking)\n-  **Payment**| Stripe (credit purchase flow)\n-  **Invoice PDF** | Invoice generation for payments\n-  **Emails** | Sendgrid (when buy a survey)\n-  **Theme** | Dark/White theme\n-  **Observability:** Logstash + Elasticsearch + Kibana + Grafana  \n-  **Monitoring** | Prometheus + Grafana (Latency, Error Rate, Traffic, Saturation) \n-  **Unit/Integration Test** | Vitest + JaCoCo + Codecov + TestContainers\n-  **Stress tests** with k6 (nightly via GitHub Actions)\n-  **MCP** | analytics service with MCP connected to an LLM (feature available for premium users).\n-  **Delivery** GitHub Actions · Docker · Caddy reverse‑proxy\n\n\n## Docs\n-  **See** [Database Recovery Guide](docs/data-recovery.md) for how to restore the database in case of an incident\n-  **See** [Secure Docker Deploy Guide](docs/secure-deploy.md) for deploying in a safe way with docker compsoe with a dedicated non root user\n-  **See** [Deploy Keycloak](docs/deploy-keycloak.md) for deploying keycloak\n-  **See** [Monitoring Configuration](docs/monitoring-config.md) for customizing Prometheus targets\n## Project Structure\n\n```\n.github/workflows\n├── dependabot.yml\n└── workflows\n    ├── cd\n        ├── ...\n    ├── ci\n        ├── ...\n    ├── nightly-stress.yml\n    ├── release-changelog.yml\n    └── security.yml\n└── services\n    ├── analytics (fastapi python3.12)\n    ├── backend (spring boot 3 java 17)\n    ├── backoffice (angular v20)\n    └── frontend (vuejs v3)\ninfra/\n  ├──  kubernetes/\n  ├──  keycloak/\n       ├──   docker-compose.yml\n       ├──  Caddyfile\n  ├──  monitoring/\n       ├──  docker-compose.yml\n       ├──   elk/\n       ├──  grafana/\n       ├──  Caddyfile\n  ├── compose/\n       ├──  docker-compose.yml\n       ├──  docker-compose.dev.yml\n       ├── Caddyfile\n  ├── scripts/\n  ├── docs/\n      ├── data-recovery.md\n      ├── secure-docker.md\n      ├── deploy-keycloak.md\n      ├── monitoring-config.md\n  ├── performance/\n      ├──  stress_tests/\n```\n\n###  Dev development\nRun `make help` to view all available targets.\n\n```bash\n # db + api + ui + elk\n\n $ make dev-up           # start all services\n # docker compose -f infra/compose/docker-compose.dev.yml --env-file infra/compose/.env up --build --force-recreate -d\n\n # stop services\n $ make dev-down\n\n # tail container logs\n $ make dev-logs\n\n # /services/backend\n $ ./mvnw --debug spring-boot:run\n\n # /services/frontend\n $ npm run dev\n```\n\nMore details: [`backend/README.md`](./services/backend/README.md)\nMore details: [`frontend/README.md`](./services/frontend/README.md)\nMore details: [`analytics/README.md`](./services/analytics/README.md)\nMore details: [`backoffice/README.md`](./services/backoffice/README.md)\n\n\n## License\nBSD 3-Clause\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxdanielsb%2Fsurvey-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxdanielsb%2Fsurvey-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxdanielsb%2Fsurvey-app/lists"}