fuzzyworld

north-star

This is the repo for Friend Compass: https://pavelsafronov.gitlab.io/north-star/

App: https://apps.fuzzyworld.net/north-star/

Contribute: contrib-68uq+north-star@fuzzyworld.net (how) · Report a bug: bugs-k7q4+north-star@fuzzyworld.net

git clone https://code.fuzzyworld.net/north-star.git

Open in VS Code · Open in VS Code in the browser · CI: ✗ failed

Recent commits

2026-10-27979323a✗ Rename .gitlab-ci.yml to .fw-ci.ymlPavel Safronov
2026-10-26b10cf38Deploy to apps.fuzzyworld.net with fuzzyworld-toolsPavel Safronov
2026-03-2596f7bf1favicon changePavel Safronov
2026-03-16a3080damostly doc updatesPavel Safronov
2026-03-16d2728f1ci pasta!Pavel Safronov

Full log

Friend Compass

What is it?

Friend Compass is a web application that lets users share location in real-time with others. It provides a simple interface to see where everyone is relative to themselves, and does not require any accounts or authentication. Just share the room link or QR code, and everyone can join and see each other's location on a map.

Features

FYI: The app is free to use, but hosting is not always free. It relies on Firebase Realtime Database, which has a generous free tier but may incur costs if usage exceeds those limits.

Requirements

How to use it?

  1. Open Friend Compass.
  2. Share the room QR code or room link with your friends so they can join the same "room".
  3. Everyone who joins the room can see each other's relative location as an arrow.
  4. Everyone can set a custom name and color for their marker.
  5. You can hide or reorder friends.
  6. The North participant is a special marker that always points north.
  7. If North is not pointing to true north, orient your phone so "up" on the screen faces north, then click "Calibrate North". This sets the current orientation as north.
  8. A misaligned north is only a visual issue and does not affect actual location sharing.

How does it work?

The app uses Firebase Realtime Database to store and sync location data of all friends in real-time. When a user joins a room, they are added to the database with location and profile info. The app listens for database changes and updates the map accordingly.

Is it secure?

The app does not require authentication, so anyone with the room information can join and see locations of all their friends.

The room link/QR code contains a unique room id and encryption key. Even if someone gained database access (including myself), they could not read location data without the room link.

Share the room QR code/link only with trusted people to protect your privacy.

If a link is leaked or compromised, create a new room and share the new QR code/link with your friends.

Here is a screenshot of database info currently stored (March 2026) for test rooms. Room and friend ids are random strings, and friend info is encrypted. Without the room link, data in the database cannot be tied to real-world identities or locations.

Firebase Realtime Database view (March 2026) with encrypted participant
information

Links

Inspiration

Totem Compass and Crowd Compass provide similar functionality, but they are physical products made for off-the-grid use cases such as hiking or festivals where cellular connectivity may be limited.

This app is designed for phone-first scenarios where people want to share location with friends (or strangers) in real-time and have internet connectivity.

Development

Local development

  1. Install dependencies:

    bash npm install

  2. Run the dev server:

    bash npm run dev

  3. Build production artifacts into ./public:

    bash npm run build

  4. Preview the production build locally:

    bash npm run preview

Features Implemented

User-Facing Features

Technical Improvements

Future Work

Planned Features

Mobile Platform Support

Firebase database rules

This repo includes Realtime Database security rules in config/firebase/database.rules.json.

The rules can be deployed using the Firebase CLI, with

npm run firebase:deploy-rules

Without these rules, your database may allow unsafe writes.

Firebase stale room cleanup

The app does not currently implement any automatic cleanup of stale rooms or participants. This means that if a room is created and then abandoned, its data will remain in the database indefinitely.

To clean up stale rooms, we're using GitLab's scheduled pipelines to run a cleanup script every week.

The script can be called manually in preview mode with

npm run clean-old-firebase:preview-30d

and actually executed with

npm run clean-old-firebase:run-30d

Absolute location

I explicitly chose not to expose direct map deep links in the UI, and this feature will not be added.

The app keeps precise coordinates internally for relative-arrow calculations, but intentionally shows only relative directions.

This is a current design choice. Feel free to bring this up in an issue if you have strong feelings about it.

Testing

Is it open source?

You're looking at it.

License

This project is licensed under the MIT License.

Why MIT for this project?

Short version: emotional simplicity and momentum.

Tradeoff accepted:

If priorities change later (for example, stronger anti-closed-clone goals), future versions can be relicensed with a different strategy.