Skip to content

About

Static app for tracking days in countries to monitor tax residency (183-day rule). Built with Vue.js, Bootstrap 5.3.5, and Vite. Uses localStorage, deployable on S3. Logs stays, warns at 150+ days, and summarizes totals. Ideal for traveling freelancers!

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Repository files navigation

183Tracker

A client-side web application for tracking stays in different countries and monitoring tax residency limits (the 183-day rule).

Public Deployment

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.

Features

  • 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

Installation

Requires Node.js 20.19+ or 22.12+.

# Install dependencies
npm install

Development

# Run development server
npm run dev

Production Build

# Build for production
npm run build

This will create a dist folder containing the static files ready for deployment.

How It Works

Counting Periods

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.

Day Counting

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.

Deployment to AWS S3

  1. Create an S3 bucket for your website
  2. Enable static website hosting for the bucket
    • Set index.html as the index document
    • Optionally set an error document
  3. Set the bucket policy to allow public read access
  4. Upload the contents of the dist folder to your S3 bucket
# Example using AWS CLI to upload files
aws s3 sync dist/ s3://your-bucket-name/ --acl public-read

Design Philosophy

183Tracker 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

Technologies

  • Vue.js
  • Bootstrap 5.3
  • Bootstrap Icons 1.13
  • Vite (build tool)
  • localStorage (data persistence)

Environment Variables

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 .env

Available 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.

About

Static app for tracking days in countries to monitor tax residency (183-day rule). Built with Vue.js, Bootstrap 5.3.5, and Vite. Uses localStorage, deployable on S3. Logs stays, warns at 150+ days, and summarizes totals. Ideal for traveling freelancers!

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages