Browser Fingerprint
A project exploring browser fingerprinting — techniques used to uniquely identify devices and related accounts.
Before learning about browser fingerprinting, I assumed incognito browsing truly meant anonymity from advertisement trackers, pricing trackers, and browsing history correlation.
However, I noticed strange behavior.
After searching a product in incognito mode, I immediately started seeing ads for it on Instagram.
Another example:
Watching a YouTube video in incognito mode, closing the browser, reopening incognito, and finding the red progress seeker already advanced.
How was activity being tracked without cookies or local storage?
That question led me to browser fingerprinting.
When your browser visits a website, it reveals many tiny signals:
- user agent string
- fonts
- screen resolution
- hardware concurrency
- GPU rendering behavior
Canvas fingerprinting renders pixels using CPU/GPU timing characteristics.
Tiny hardware manufacturing differences produce microsecond-level variations. Individually insignificant — collectively powerful.
My project goal was implementation rather than rebuilding everything from scratch.
Shoutout to fingerprint-js:
https://github.com/fingerprintjs/fingerprintjs
Project flow:
- On first visit:
- fingerprintJS generates a unique ID.
- user sets slider preference.
- both values are stored in PostgreSQL (Neon DB).
- Returning visitor (even via incognito):
Slider state restores without cookies, email IDs, or login credentials.
The project was intentionally scoped to a weekend learning experiment.
Future possibilities:
- logged-in state recovery
- rate limiting
- bot detection
- heat maps
- mouse tracking analytics
Repository:
https://github.com/Vijji04/browser-fingerprint-test/blob/main/web-home/app/page.tsx