A web platform to monitor OpenStreetMap datasets at the city level.
- Node.js (see
.nvmrcfor specific version) - PostgreSQL (running on port 5432)
- pnpm package manager
- Copy
.env.exampleto.env.local:
cp .env.example .env.local- Update the following required settings in
.env.local:
DATABASE_URL: Your PostgreSQL connection stringAUTH_SECRET: A secure random string for session encryptionAUTH_URL: Your application URLCRON_ROUTE_SECRET: Generate a new random string (e.g. withopenssl rand -hex 32) and use it as your API secret for the cron job
Example to generate a secret:
openssl rand -hex 32Email configuration:
For Production: Postmark credentials are required for magic link authentication
POSTMARK_API_TOKEN- Your Postmark API tokenPOSTMARK_FROM_EMAIL- Verified sender email (e.g.,noreply@yourdomain.com)
For Development: Postmark is optional
- Without Postmark: Magic links are printed to console (clickable in most terminals)
- With Postmark: Real emails sent automatically
EMAIL_DISABLE=trueto disable all email sending
- (Optional) Add Postmark credentials for email functionality.
Install dependencies:
pnpm install- Generate the Prisma client:
npx prisma generate- Push the schema to your database:
npx prisma db push- (Optional) View your database with Prisma Studio:
npx prisma studioRun the development server:
pnpm devOpen http://localhost:3000 with your browser to view the application.
The application includes a task-based API accessible at /api/tasks. Each task has its own dedicated endpoint for executing automated operations.
- send-user-reports: Sends dataset status reports to users who haven't received one in the last 24 hours
- update-datasets: Updates datasets that need refreshing (not yet implemented)
# Send email report
curl -X POST "https://yourdomain.com/api/tasks/send-user-reports" \
-H "Authorization: Bearer YOUR_CRON_ROUTE_SECRET"
# Update datasets
curl -X POST "https://yourdomain.com/api/tasks/update-datasets" \
-H "Authorization: Bearer YOUR_CRON_ROUTE_SECRET"This project uses next-intl for internationalization. Translation files are in the messages/ directory.
pnpm i18n:check
# Check and automatically fix issues (when possible)
pnpm i18n:check:fixThe i18n check runs automatically in CI/CD and before commits when translation files are modified.
This project's documentation is an ongoing effort. You can find more detailed information on specific features in the docs/ directory.
We welcome improvements to our documentation! If you notice something is missing, unclear, or incorrect, please feel free to open a pull request. To contribute:
- Create or edit the relevant Markdown file in the
docs/directory. - If you are documenting a new feature, please create a new file in
docs/features/. - Keep the language clear and concise.
- Submit a pull request with your changes.
MIT