Tailfin
A self-hosted digital flight logbook

## Table of Contents
- [About](#about)
- [Getting Started](#getting_started)
- [Docker](#docker)
- [From Source](#from_source)
- [Configuration](#configuration)
- [Usage](#usage)
- [Roadmap](#roadmap)
## About
Tailfin is a digital flight logbook designed to be hosted on a personal server, computer, or cloud solution.
I created this because I was disappointed with the options available for digital logbooks. The one provided by
ForeFlight is likely most commonly used, but my proclivity towards self-hosting drove me to seek out another solution.
Since I could not find any ready-made self-hosted logbooks, I decided to make my own.
## Getting Started
### Docker
|:exclamation: Note :exclamation: |
|---------------------------------|
| Docker builds are considered unstable at this point and cannot be guaranteed to work without customization. Proceed at your own risk |
1. Clone the repo
```
$ git clone https://git.github.com/azpsen/tailfin.git
$ cd tailfin
```
2. Configure `docker-compose.yml` and `.env`
3. Build/pull the images and start the service
```
$ docker compose build
$ docker compose pull
$ docker compose up -d
```
4. Log in to the web UI at `localhost:3000`
### From Source
#### Prerequisites
- nodejs
- npm
- python 3.11
- mongodb 7.0.4
#### Installation
##### 1. Clone the repo
```
$ git clone https://git.github.com/azpsen/tailfin.git
$ cd tailfin
```
##### 2. Set up database
[Install MongoDB](https://www.mongodb.com/docs/manual/installation/)
[Enable Authentication](https://www.geeksforgeeks.org/how-to-enable-authentication-on-mongodb/)
Add the `tailfin` user:
```
$ mongosh -u "yourAdminUsername" -p
> use tailfin
> db.createUser(
{
user: "tailfin-api",
pwd: "tailfin-api-password", // or passwordPrompt() for secure entry
db: "tailfin",
roles: [ { role: "readWrite", db: "tailfin" } ]
}
)
```
##### 3. Set up backend
```
$ cd api
```
(Optional) Create and activate python virtual environment:
```
$ python -m venv tailfin-env
$ source
```
Install python requirements:
```
$ pip install -r requirements.txt
```
[Configure the backend](#backend_configuration)
##### 4. Set up frontend
Install NPM requirements:
```
cd ../web
$ npm install
```
Build and run the web app:
```
$ npm run build && npm run start
```
5. Access the web UI at `localhost:3000`
## Configuration
The URL for the Tailfin API can be set with the environment variable `TAILFIN_API_URL`. It defaults to `http://localhost:8081`, which assumes the API runs on the same machine and uses the default port.
### Backend
To configure Tailfin, modify the `.env` file. Some of these options should be changed before running the server. All
available options are detailed below:
`DB_URI`: Address of MongoDB instance. Default: `localhost`
`DB_PORT`: Port of MongoDB instance. Default: `27017`
`DB_NAME`: Name of the database to be used by Tailfin. Default: `tailfin`
`DB_USER`: Username for MongoDB authentication. Default: `tailfin-api`
`DB_PWD`: Password for MongoDB authentication. Default: `tailfin-api-password`
`REFRESH_TOKEN_EXPIRE_MINUTES`: Duration in minutes to keep refresh token active before invalidating it. Default:
`10080` (7 days)
`ACCESS_TOKEN_EXPIRE_MINUTES`: Duration in minutes to keep access token active before invalidating it. Default: `30`
`JWT_ALGORITHM`: Encryption algorithm to use for access and refresh tokens. Default: `HS256`
`JWT_SECRET_KEY`: Secret key used to encrypt and decrypt access tokens. Default: `please-change-me`
`JWT_REFRESH_SECRET_KEY`: Secret key used to encrypt and decrypt refresh tokens. Default: `change-me-i-beg-of-you`
`TAILFIN_ADMIN_USERNAME`: Username of the default admin user that is created on startup if no admin users exist.
Default: `admin`
`TAILFIN_ADMIN_PASSWORD`: Password of the default admin user that is created on startup if no admin users exist.
Default: `change-me-now`
`TAILFIN_PORT`: Port to run the local Tailfin API server on. Default: `8081`
Once the backend is running, full API documentation is available at `localhost:8081/docs`
## Roadmap
- [x] Create, view, edit, and delete flight logs
- [x] Aircraft managment and association with flight logs
- [x] Dashboard with statistics
- [x] Attach photos to log entries
- [ ] Import from other log applications (partially working for MyFlightBook)
- [ ] Admin dashboard to manage all users and server configuration
- [ ] GPS track recording and map display
- [ ] Calendar view
- [ ] PDF Export
- [ ] Integrate database of airports and waypoints that can be queried to find nearest