Flightbook is a personal logbook for paraglider and hang glider pilots. The flights must be registered manually and the logbook is not connected to any GPS.
Why is-it not connected to GPS? There exist a lot of application that are connected to the GPS but often you don’t want to register the track but you just like to have a trace of the flight. For example: Tandem pilots
How is construct this project? The entire project is construct in two parts.
- An API – Current repository
- A Web and Mobile application – https://github.com/laggery/Flightbook-MobileApp
I started with this project in 2013 and first it was used from some Friends and me. 2015 I published the first mobile application version and developed a Symfony web page. 2020 I decided to redevelop the mobile application with the Ionic Framework, the backend with nestjs and make the entire project open source.
Start docker-compose.yml
docker-compose -f docker/docker-compose.yml up -d
Create a .env file
ENV=local
LOG_LEVELS=log,error,warn,debug,verbose
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USER=flightbook_dev
DATABASE_PASSWORD=dev
DATABASE_NAME=flightbook_dev
DATABASE_SYNCHRONIZE=false
DATABASE_SCHEMA=data
DATABASE_SSL=false
KEYCLOAK_BASE_URL=http://localhost:8080
KEYCLOAK_REALM=flightbook
KEYCLOAK_CLIENT_ID=flightbook-api
KEYCLOAK_CLIENT_SECRET=SEE_KEYCLOAK_CLIENT_SECRET --> open keycloak and get the client secret from the flightbook-api client
KEYCLOAK_ADMIN_USERNAME=admin
KEYCLOAK_ADMIN_PASSWORD=admin
AWS_S3_ENDPOINT=http://localhost
AWS_BUCKET=flightbook-bucket
AWS_ACCESS_KEY_ID=flightbook_dev
AWS_SECRET_ACCESS_KEY=flightbook_dev_secret
JWT_SECRET=mySecret
TOKEN_EXPIRATION=1000h
# Origin
ORIGIN_INSTRUCTOR=localhsot:4200
# Mobile App URL
MOBILE_APP_URL=http://localhost:8100
# Instructor App URL
INSTRUCTOR_APP_URL=http://localhost:4200
# Backend API URL
API_URL=http://localhost:8282
# Email
EMAIL_HOST:
EMAIL_USER:
EMAIL_PASSWORD:
EMAIL_PORT:
EMAIL_FROM:
# Payment
STRIPE_SECRET_KEY=sk_test
STRIPE_ENDPOINT_SECRET=whsec
STRIPE_PRICE=price
REVENUECAT_URL=https://api.revenuecat.com
REVENUECAT_ENTITLEMENT=
REVENUECAT_AUTH=
REVENUECAT_STRIPE_PUBLIC_KEY=
#map
MAP_URL=
MAP_ATTRIBUTIONS=
MAP_CROSS_ORIGIN=
# Google OAuth Credentials (from Google Cloud Console)
GOOGLE_CLIENT_ID=your-client-id-here.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret-here
FIREBASE_CREDENTIAL_JSON=
# Version Check (Mobile App)
ANDROID_MINIMAL_VERSION_BUILD=
ANDROID_LATEST_BUILD=
ANDROID_APP_ID=
IOS_MINIMAL_VERSION_BUILD=
IOS_LATEST_BUILD=
IOS_APP_ID=
Open minio http://localhost:9001/ and create a new bucket with name flightbook-bucket
Start nestjs app
npm run start:dev
MIGRATION_NAME=appointmentType npm run migration:generate
-
Go to Google Cloud Console
-
Create a new project or select an existing one
-
Enable the Google Calendar API:
- Navigate to "APIs & Services" → "Library"
- Search for "Google Calendar API"
- Click "Enable"
-
Create OAuth 2.0 credentials:
- Go to "APIs & Services" → "Credentials"
- Click "Create Credentials" → "OAuth 2.0 Client ID"
- Choose "Web application" as application type
- Configure the OAuth consent screen if prompted
-
Add authorized redirect URIs:
- Add your backend callback URL:
{API_URL}/schools/google-calendar/callback - Note: We use a single redirect URI for all schools. The school ID is passed via the OAuth
stateparameter
- Add your backend callback URL:
-
Copy the Client ID and Client Secret
If you discover security related issues, please email yannick.lagger@flightbook.ch instead of using the issue tracker.
Copyright (C) 2013-2020 Yannick Lagger, Switzerland. Flightbook is released under the GPL3 License
- Yannick Lagger yannick.lagger@flightbook.ch