A simple self-hosted check-in app for saving where you have been or favouriting locations. Something I put together after wanting a way to 'check-in' to places I like, or have simply been, using my phone (or browser, in case I forget to on my phone), without relying on some third party provider.
My aim is to keep the API extremely simple, and unchanging.
This is just a small side project I'm working on when I feel like it. I have purposely kept things simple for now. No need to add complexity until necessary (hence the recent move to HTMX + Razor Pages!).
This project is not vibe-coded (I don't use any AI tools in vscode). I do use an LLM in the browser in the same way I would have previously used web search / StackOverflow.
The logo/favicon was generated by ChatGPT.
Styling ideas/boiler plate for the add popup & header also from ChatGPT, enhanced/polished by me.
- Simple web API to save a longitude, latitude, note and date to a database.
- Map visualisation see your saved locations plotted on a leaflet.js map.
- Dockerized for easy deployment.
-
Endpoint:
POST /checkin -
Content-type:
application/json -
Body params:
Field Type Description latdoubleLatitude in decimal degrees longdoubleLongitude in decimal degrees dateTimestringCan be any string * notestringText content of the note -
Example request:
curl -X POST http://localhost:8080/checkin?apiKey=your_api_key \ -H "Content-Type: application/json" \ -d '{ "lat": 50.17479763660827, "long": -5.256169543434019, "dateTime": "2025-05-11T14:30+01:00", "note": "Cornwall!" }'
-
Note that 'dateTime' is a text field in SQLite, so it can be whatever you want. I personally opt for ISO8601 as I feel that has all the info I'd ever need.
Once the Docker container is running, go to http://localhost:8080/checkin
Use Shortcuts with the following actions:
- Get current location
- Current Date
- Ask for Text with Note
- Get contents of http://localhost:8080/checkin?apiKey=your_api_key
With the above actions, you then have enough data to send a POST request to the API, which can be done in the 'Get contents of' advanced options.
Place a shortcut on your home screen or in the action centre!
You can find a blank SQLite database here.
Make sure you copy db_empty.db to the right place and update the docker run command / Docker Compose config accordingly.
docker run \
-d \
-p 8080:8080 \
-v ./checkin_data/db.db:/data/db.db \
-e Settings__ApiKey="your_api_key" \
cwndev/checkin:latestservices:
checkin:
image: cwndev/checkin:latest
container_name: checkin
restart: always
environment:
- Settings__ApiKey=your_api_key
ports:
- 8080:8080
volumes:
- ./checkin_data/db.db:/data/db.db
- HTMX
- .NET Razor Pages
- .NET Core 10 Minimal APIs
- TypeScript ES2022 (plain JS)
- SQLite
