Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

🏴‍☠️ piratepx

A simple, privacy-respecting, no cookie, zero JavaScript, 35 byte counter pixel for websites, mobile apps, server-side APIs, CLIs, and just about anywhere else.

Sign up for free at! piratepx


This repository contains both the backend and frontend of the app to simplify development and deployment. Other than a few lines of configuration here and there to make this possible, however, they're pretty much separate codebases.


The backend is a JSON REST API built in Node.js using Fastify and Objection.js. It persists data to a PostgreSQL database.

The source code is located in the api directory, with configuration files in the root of this repository (where this README lives).


The frontend is a single-page app built with Vue.js and Tailwind CSS.

The source code is fully isolated in the web directory, which is also where its own configuration files are located.


The following includes the necessary steps to get the full app setup for development, with a focus on backend-specific details. See web/ for frontend-specific details.


Docker Compose is used to run PostgreSQL as configured in docker-compose.yml. Once installed, simply run:

$ docker-compose up

The app itself is not run in a Docker container in development, as it's easy enough to install the necessary version of Node.js with nvm:

$ nvm install


Install dependencies with npm:

$ npm install
$ cd web && npm install


dotenv is used to load environment variables from a .env file into process.env. This file is ignored by version control to prevent committing secrets.

See .env.dist for an example.



Ensure PostgreSQL is running, then:

$ npm run dev:db:create


Knex.js is used to manage database migrations, which are located in api/db/migrations.

To run the latest migrations:

$ npm run knex migrate:latest


Start both the backend and frontend development servers:

$ npm run dev

Code Style & Linting

Prettier is setup to enforce a consistent code style. It's highly recommended to add an integration to your editor that automatically formats on save.

ESLint is setup with the "recommended" rules to enforce a level of code quality. It's also highly recommended to add an integration to your editor that automatically formats on save.

To run via the command line:

$ npm run lint


After development is done in the development branch and is ready for release, it should be merged into the master branch, where the latest release code lives. Release It! is then used to interactively orchestrate the release process:

$ npm run release