An interactive programming learning platform with automated assessment and hands-on practice.
This project aims to enable students to learn programming through hands-on practice with automated assessment and real-time feedback.
It is also my capstone project for the Web and Web Mobile Developer REAC certification, which I am currently undergoing at La Plateforme_.
- Provide an interactive environment for learning programming concepts
- Implement automated code assessment and feedback
- Support multiple user roles (such as Student, Instructor, Admin)
- Demonstrate full-stack development skills using industry standards
This project is built with Java/Spring Boot backend and Thymeleaf frontend.
- Language: Java 21
- Frameworks:
- Java Framework used to build (Web) Applications and REST endpoints.
- Spring Boot 3.x:
- Thymeleaf
- Java Framework used to build (Web) Applications and REST endpoints.
- Authentication and authorization framework:
- Spring Security:
- Database:
- PostgreSQL version 17
- Build and dependency management tool:
- Containerization:
TODO
- JetBrains IntelliJ IDEA: IDE
- Git: Version control
- Maven: Build and dependency management
- Podman: Containerization
- Swagger: API documentation
See the Tech Stack section.
- Clone the
ebouchut/learn-devGit Repository - Install Docker, Docker Desktop, and Docker Compose
#
git clone git@github.com:ebouchut/learn-dev.git
# git clone https://github.com/ebouchut/learn-dev.git
cd learn-devFrom the project root folder. Install Docker and Docker Compose:
- on macOS (read this for Windows or Linux install):
brew install docker docker-compose docker-desktop
- on Windows and Linux
- Edit
.env- Set a value for the variables
POSTGRES_PASSWORD,LEARNDEV_DB_PASSWORD,MONGO_ROOT_PASSWORD
- Set a value for the variables
This starts all the Docker services for the application:
docker compose up -dFor each service (postgres, mongo)
declared in the Docker Compose configuration file
(docker-compose.yaml), Docker Compose:
- downloads the Docker image (if not cached yet) from the Docker Hub registry,
- stores the downloaded image in the local Docker image cache,
- starts a Docker container based on this image (if it is not already running).
This stops all the Docker services for the application:
docker compose downI use ** Docker Compose** (a CLI tool) to describe and handle the lifecycle of services that comprise my application.
A service is basically a component of the application packaged as a Docker container. It specifies the Docker image and version, configuration, and the network and Docker volume(s) if any.
A Docker image is pre-packaged piece of software that can work as a standalone on Linux. Docker Hub is a public registry that hosts and serves public Docker images.
Running the app using docker compose up -d
starts all the application services, including postgres.
To only start the postgres service:
docker compose start -d postgres
docker compose logs postgresNote
The above command downloads, installs the postgres Docker image
specified by the postgres service in docker-compose.yaml.
Then it runs a Docker container with this image.
Note
A Docker init script automatically creates the database user and the application database
when the postgres service is run for the first time.
Now, check that postgres is running:
docker compose ps | grep postgresTo recreate the database, and start from scratch you need to stop the
postgrescontainer and remove the (data) volumes.
See theRemove all Posgres Databasessection for details.
docker compose stop postgresStops and remove the postgres container and its data volume.
Caution
This is a destructive command that will remove all the databases (structure and content) created by Postgres running in the container.
docker compose stop postgres # Stop the container
docker rm postgres # Remove the container
docker volume rm pg_data # Remove the named volume docker compose start mongoNow, check that mongo is running:
docker compose ps | grep mongodocker compose stop mongoCaution
This destructive command will stop and remove the container, then remove its data volume (all the databases created by MongoDB running in the container).
docker compose stop mongo # Stop container
docker rm mongo # Remove the stopped container
docker volume rm learn-dev_mongo_data # Remove the named volume See the GitHub Project for up-to-date information.
See the CONTRIBUTING.md file for how to help out.
It contains detailed guidelines, including:
- Architecture overview
- Code:
- Documentation
- Directory structure
- Naming conventions
- Database:
- Database schema, ERD (Entity Relationships Diagram)
- Running database migrations
- Git:
- Git branching strategy
- Git commit message conventions
- Dependencies:
- Adding dependencies
- Installing dependencies
- Running tests
- Submitting pull requests
- ...
This project is dual-licensed
under AGPL v3 for open source use
and a commercial license for proprietary use.
See LICENSE for details.
Eric Bouchut:
- LinkedIn: https://linkedin.com/in/ebouchut
- GitHub: @ebouchut
- Blog: https://EricBouchut.com
- 💙 A big thank you to our instructors for their involvement and help:
- REAC Developpeur Web et Web mobile