A client-side web application for tracking stays in different countries and monitoring tax residency limits (the 183-day rule).
Use it now: https://183tracker.guztia.com
The application is freely available at the link above. No installation required - just visit the website and start tracking your stays. Self-hosting (instructions below) is completely optional.
- Track days spent in different countries
- At-a-glance status for the country you are in now, with a one-tap "I've moved" flow
- Quick add/edit dialog with country suggestions, and undo for deleted stays
- Monitor tax residency thresholds (183-day rule)
- Rolling 365-day, calendar-year and all-time views for tax residency tracking
- Progress towards the 183-day threshold, with a warning from 150 days
- Visual indicators for stays within the last year
- Overlapping stays are detected, and recording a new current stay automatically ends the previous one
- Responsive UI built with Vue.js and Bootstrap
- Available in multiple languages: English, Chinese, Spanish, German, French and Thai
- Dark/light theme toggler for comfortable viewing
- All data stored locally in your browser (localStorage)
- No server dependencies - works completely offline after initial load
Requires Node.js 20.19+ or 22.12+.
# Install dependencies
npm install# Run development server
npm run dev# Build for production
npm run buildThis will create a dist folder containing the static files ready for deployment.
Countries count the 183 days in different ways, so the summary can be switched between:
- Rolling 365 days (default): days within the last 365 days, used by countries that look at any 12-month period
- Calendar year: days from 1 January of the current year until today, used by many countries (e.g. Spain, Thailand)
- All time: every recorded day
Stays in the last 365 days are marked in the stays list, and your chosen period is remembered.
Days are counted inclusively (both start and end dates are counted as full days), which is the standard method used by most tax authorities. A travel day can therefore count for both the country you leave and the one you arrive in.
All dates are calculated in your local timezone.
183Tracker is for guidance only and is not tax advice. Residency rules vary by country and often include tests other than day counts.
- Create an S3 bucket for your website
- Enable static website hosting for the bucket
- Set
index.htmlas the index document - Optionally set an error document
- Set
- Set the bucket policy to allow public read access
- Upload the contents of the
distfolder to your S3 bucket
# Example using AWS CLI to upload files
aws s3 sync dist/ s3://your-bucket-name/ --acl public-read183Tracker is designed for freelancers and digital nomads tracking their tax residency while traveling. The app is:
- Lightweight - Fast loading and minimal resource usage
- Private - All data stays in your browser
- Simple - Focus on the essential information you need
- Responsive - Works on desktop and mobile devices
- Vue.js
- Bootstrap 5.3
- Bootstrap Icons 1.13
- Vite (build tool)
- localStorage (data persistence)
This application uses environment variables for configuration. Copy the .env.example file to a new file named .env and adjust the values as needed:
# Copy example environment variables
cp .env.example .envAvailable environment variables:
| Variable | Description | Example |
|---|---|---|
| VITE_GOOGLE_ANALYTICS_ID | Google Analytics measurement ID (optional; analytics is not loaded when empty) | G-XXXXXXXXXX |
Note: The .env file is excluded from version control to protect sensitive values.