A Spring Boot and Thymeleaf web application that provides online stationery and digital services. Users can browse services, place orders, download announcements, and manage their orders, while administrators can manage services, announcements, and customer orders through a secure dashboard.
- Browse and view online services with details and cost.
- Place orders for services and view order history.
- Download order receipts (PDF format).
- Leave general comments on services.
- Secure login to access personal orders.
- Responsive UI for desktop and mobile devices.
- Secure admin login and logout.
- Upload, update, and manage announcements with expiration tracking.
- Add, edit, and delete online services.
- View and filter customer service orders by status and service.
- Update order status (Pending → In Progress → Completed).
- Change admin password with real-time password validation.
- Responsive design using Bootstrap 5.
- Interactive UI elements including modals, cards, and badges.
- Alerts for success, errors, and notifications.
- Downloadable files for customers and announcements.
- Backend: Spring Boot
- Frontend: Thymeleaf templates, Bootstrap 5, Bootstrap Icons
- Database: PostgreSQL
- Security: Spring Security for admin authentication
- PDF Generation: Order receipts in PDF format
- Tools & Libraries: Maven, JDK 17, HTML5, CSS3, JavaScript
Admin Dashboard / Upload Service

- Clone the repository
git clone https://github.com/meshack-venance/the-sky-online-service.git
cd the-sky-online-service- Create your local secrets file
cp config/application-secrets.yaml.example config/application-secrets.yaml- Choose the profile
# default
export SPRING_PROFILES_ACTIVE=dev
# for production
export SPRING_PROFILES_ACTIVE=prod- Set real secrets outside Git
- Keep real database passwords and keys in environment variables or
config/application-secrets.yaml. - Keep the JWT signing secrets in environment variables or
config/application-secrets.yaml. - Do not commit
config/application-secrets.yaml. application-dev.yamlandapplication-prod.yamlno longer store DB credentials.- Put
spring.datasource.url,spring.datasource.username, andspring.datasource.passwordinconfig/application-secrets.yamlor environment variables. - Put
app.auth.jwt.access-secretandapp.auth.jwt.refresh-secretinconfig/application-secrets.yamlor environment variables. - Put
app.auth.jwt.access-token-expiration-minutesandapp.auth.jwt.refresh-token-expiration-daysinconfig/application-secrets.yamlor environment variables. - Example local PostgreSQL URL is
jdbc:postgresql://localhost:5432/sky_online_db_local.
- Bootstrap the first admin explicitly
- The app no longer creates a default
admin/passwordaccount. - To create the first admin on an empty database, set
APP_ADMIN_USERNAMEandAPP_ADMIN_PASSWORDin your environment or inconfig/application-secrets.yaml. - After the first admin record exists, those bootstrap values are no longer needed for normal startup.


