Deployment Strategies
Creating Docker Images
Multi-stage builds
Docker Compose
Container Registries
Deploying to the Cloud
Database Migrations
Practice
Assignment
Backend Track
Week 11-14 Assignment (mini project)
Image upload service
Description
You have been assigned to write the backend API for an image hosting application. In this application, users will be able to upload their images to the server. Users and guests will be able to search images on the website by keywords (e.g: car, dog).
Requirements
- User login, logout and registration.
- User will be able to upload images up to 10MB each image.
- User will be able to see all their uploaded images.
- User will be able to delete his own images.
- Everyone can search images by free text describing the contents of the image (e.g: car, dog, sunset).
- Everyone can view 50 images (on the home page)
Technical requirements
- Implement session management with opaque session ID (Not JWT) - Save tokens in the Database with an expiration date and other data like user ID.
- Handle passwords securely with bcrypt.
- Store user images in an Object Storage (e.g Backblaze).
- For image tag data, use JSONB columns.
- Each image should have its own direct URL that will display the image in the browser for example. Use a private bucket and create an endpoint to proxy the request to the private bucket and return the image data to the user.
- Deploy the server to the cloud using a Docker Container.
AI image tagging
Each uploaded image will be tagged by an LLM of your choice. We will split the tags into three categories:
- Objects - things that in the picture like a tree, car, cloud
- Tags - anything else that is not an object like setting, time of day, weather, mood etc..
- Colors - Up to 3 most prominent colors in the picture. Pick from the list of 11 basic colors in the English language
Example:

{
"objects": ["Palm tree", "sun", "sea", "beach", "boat", "sand"],
"tags": ["sunset", "beach scene", "silhouette", "tropical", "reflection on water"],
"colors": ["orange", "pink", "purple"]
}
Tips
- Write a good prompt with examples. Test your prompt in your AI chat app.
- LLM API options:
- Local Ollama - great for local development if your computer can handle it. Pick a small model with vision.
- GitHub models - Use GPT-4o for 50 request/day) or GPT-4o-mini for 150 requests/day. Both models are good enough for this project.
- **Google AI Studio -** Offers free usage of some of their models.
- Bring your own API key - from OpenAI platform, Anthropic platform etc…
Bonus features + Inspiration
- Images can be either public or private. Public images are visible to everyone via search or on the home page while private images are visible only to the user.
- AI tagging can take a long time, we do not need to block the response. Use Spring Boot’s @Async notation to perform the AI tagging in the background.
- For each uploaded image, create a small square thumbnail image (100px by 100px) for fast previews. You will need to use an imaging processing library.
- Create a CI pipeline to run tests, build and push a Docker image to GitHub packages.
- Observability: Time how long it takes to tag images
- Work with an AI to generate a simple front-end app.
Submission
- Create a public repository in your GitHub and share the link with the HackYourFuture team and your assignment mentors.
The HackYourFuture curriculum is licensed under CC BY-NC-SA 4.0
*https://hackyourfuture.net/*

Built with ❤️ by the HackYourFuture community · Thank you, contributors
Found a mistake or have a suggestion? Let us know in the feedback form.