Home

Awesome

🏴‍☠️ 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 https://www.piratepx.com! piratepx

Overview

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.

Backend

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

Frontend

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.

Development

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

Prerequisites

Docker Compose is used to run PostgreSQL as configured in compose.yaml. 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

Dependencies

Install dependencies with npm:

$ npm install
$ cd web && npm install

Config

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.

Database

Migrations

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

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

Releasing

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

$ npm run release