Needs and questions
I start with what I want the application to do. AI helps identify missing decisions and explore alternatives.
MY WORKSHOP · GENAI · INFRASTRUCTURE
An idea, a few conversations with AI, and an application of my own. My approach to vibe coding has practical infrastructure behind it: GitHub, Linux servers, Docker and a shared internet gateway.
This is my setup: one example of how AI-assisted development and running your own services can work together.
01 / FROM IDEA TO APPLICATION
I use GenAI to turn an everyday need into a clear, actionable task. Conversations help me define the goal and refine the behaviour; AI then helps create and evolve the code. Decisions, verification and operations remain my responsibility.
I start with what I want the application to do. AI helps identify missing decisions and explore alternatives.
I define the behaviour, data, constraints and how we will know the solution works.
AI helps write and change the application. I try it, check the important cases and use the results to improve it.
The source goes into a version-controlled repository. I run the application in a container and continue improving it through everyday use.
02 / THE TECHNICAL FOUNDATION
My family uses iOS phones and Windows desktops. My servers run Linux exclusively. These platforms cover everyday use, development and automation.
The shared home for my project sources and their history. Version control shows what changed and lets me return to an earlier state.
Compact desktop machines repurposed as Linux servers run my applications and supporting services. They take little space and host several containers.
I also use low-power Linux devices. A different architecture and smaller hardware let me try services in a variety of environments.
Remote servers I can provision quickly. One provides a permanent network entry point; others can provide separate environments for projects or experiments.
Windows on the desktop, Linux distributions on servers and in development environments. Their roles matter more than the exact hardware inventory.
I test and use applications in mobile browsers. Shortcuts automations also connect phone events to my own services.
03 / WORTH ITS OWN CHAPTER
Python .venv environments have repeatedly brought dependency and management complications that took more effort than the project itself. For me, running each application in its own container environment is simpler.
The application and its runtime dependencies live in a defined environment. I do not have to adjust the server’s Python environment for every project.
If I drop an idea, I can remove its container and image. Project data is handled separately; other applications’ dependencies do not need to be unwound.
I build, start and update different applications in similar ways. For ARM and x64, I use images built for the appropriate architecture.
I experiment with virtual machines too. When I want stronger separation from my own infrastructure, I prefer to rent a separate VPS quickly. Dependency isolation in containers and security separation are distinct considerations.
04 / INTERNET AND PRIVATE NETWORK
The bastion is a VPS with a static public IP address. WireGuard connects it to my own servers. Its nginx reverse proxy routes incoming web requests to the appropriate application.
An encrypted network connection between the bastion and my machines. It also underpins access to internal services.
The browser’s HTTPS connection terminates at the bastion, where I manage certificates. Requests continue to my servers through the VPN.
Applications and demos intended for sharing are available under my own domains. Visitors do not need a VPN.
Personal and internal services require a VPN connection. Having a web interface does not mean a service needs to be public.
Readable addresses for applications, demos and the portfolio. The domain name and the access policy are separate decisions.
My own setup, a workshop that keeps evolving.
Back to the portfolio ↗