Aviask is an ATPL questions bank website, that focuses on community engagement.
Here is a list of some of the features implemented:
- Users can report (or give feedback to) questions.
- Users can submit questions, which have to be validated by the staff.
- Markdown field for questions, with sanitization.
- Mock exams : users are put closer to real conditions of ATPL exams.
- Monthly subscription to fully enjoy the features of Aviask.
- Non-premium users have access to a limited set of questions. This set is reset every few days.
- Dashboard with interesting information for learners
- Dark/light mode, with auto-detection
- (Disabled by default) Leaderboard : ranks the user who contribute the most to the question bank
- ...
This project uses VueJS with Typescript for the front-end part.
For the backend, I've used ASP.NET Web API. The authentication is made via a JWT, and Postgres is used for the database.
Stripe was used for the subscriptions, but another provider can easily be changed.
First, fill-in your .env
files according to the .env.dist
files in the Web & Api directories.
If ran for the first time, the API should automatically run the pending migrations.
When developping, run these commands in two seperate terminals:
# In ./AviaskWeb
npm run dev
# In ./AviaskApi
dotnet run --launch-profile https
The project comes with a docker-compose.yml
file, allowing you to deploy both front & back instances:
# At project root directory
docker compose up --build
This project uses XUnit
with the TestContainers
library to mock a database. For the tests to run, please ensure you have the docker daemon running.
# In ./AviaskApiTest
dotnet test
The home page of Aviask
Dashboard of a connected user
Question list
Question form (create)
Question