diff --git a/about-the-developer.html b/about-the-developer.html new file mode 100644 index 0000000..a4a98e1 --- /dev/null +++ b/about-the-developer.html @@ -0,0 +1,453 @@ + + + + + + + + About the Developer — Ismail Hamzah | INDOTALENT + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ Ismail Hamzah — Indotalent Developer +
+
+
+ About the Developer +
+

+ Hi, I'm Ismail Hamzah +

+

+ An independent software architect, developer, and open-source contributor from Bandung, Indonesia. + For more than 15 years, I've been building software that solves real business problems. +

+
+
+
+
+ + +
+
+
+

+ For more than 15 years, I've been building software that solves real business problems—from accounting, inventory, warehouse management, point of sale (POS), CRM, purchasing, and finance systems to enterprise web applications used in production environments. +

+

+ Unlike many digital stores, this is not a company with a large team. +

+

+ It's simply me. Every product you find here is personally designed, architected, developed, tested, documented, and maintained by me. +

+
+
+
+ + +
+
+
+
+ Journey +
+

A Small Journey That Started During COVID

+
+
+
+

+ When the COVID-19 pandemic changed the world, it also changed my career. After years of working in corporate software development and enterprise consulting, I decided to build something of my own. +

+

+ Instead of chasing short-term freelance projects forever, I wanted to create software that could continue helping developers around the world—even while I was sleeping. +

+

+ So I started publishing commercial source code, templates, and reusable application foundations. Every sale helped me improve the next product. +

+

+ Little by little, this small digital business grew. It wasn't built overnight. It was built one project at a time. +

+
+
+
+
+ COVID journey — on the train +
+

On the train during COVID

+
+
+
+ COVID journey — new bag for school +
+

New bag for school

+
+
+
+
+
+ + +
+
+
+
+ AI Era +
+

Then Came the AI Revolution

+
+
+

+ Just as the world recovered from COVID, another wave arrived. Artificial Intelligence. Today, AI can generate code in seconds. That is amazing—and I use AI myself every day. +

+

+ But after working on enterprise software for many years, I've learned something important: +

+
+

+ Generating code is not the same as designing a complete software solution. +

+
+

+ AI is excellent at writing functions. Real applications require architecture. They require authentication, authorization, database design, validation, security, maintainability, clean structure, deployment, scalability, business workflows, and hundreds of small engineering decisions that are difficult to discover one prompt at a time. +

+

+ Many developers—especially students, junior developers, freelancers, and startup founders—still spend days or even weeks trying to assemble those pieces into a production-ready application. That is exactly the problem I want to solve. +

+
+
+
+ + +
+
+
+
+ Mission +
+

Why I Still Build Source Code

+
+
+
+

+ Some people ask whether source code products are still useful in the age of AI. My answer is simple. More than ever. +

+

+ AI becomes dramatically more powerful when it starts from a well-designed foundation instead of an empty folder. Rather than asking AI to invent an entire application from scratch, you can begin with a complete, working architecture that already follows practical software engineering principles. +

+

+ Then let AI help you customize, extend, and accelerate development. +

+

+ Think of my products as enterprise-grade foundations for AI-assisted development. You are not buying thousands of lines of code. You are saving weeks—or sometimes months—of engineering work. +

+
+
+
+ My workspace +
+

My workspace

+
+
+
+
+ + +
+
+
+
+ Open Source +
+

Built by Someone Who Loves Open Source

+
+
+

+ Commercial projects are only one part of what I do. I also actively build open-source software because I believe knowledge should be shared whenever possible. +

+

+ Some of my GitHub projects have been used by developers around the world, and one of them has received more than 1,300 GitHub stars. +

+

+ Open source keeps me honest. It challenges me to write cleaner code, better documentation, and software that people genuinely enjoy using. +

+
+
+
+ + +
+
+
+
+ Experience +
+

Experience That Shapes Every Product

+
+
+
+
+ Corporate work before COVID +
+

Corporate work before COVID

+
+
+

+ Throughout my career I've worked with technologies including: +

+
+ ASP.NET Core + C# + SQL Server + PostgreSQL + MySQL + JavaScript + Vue + React +
+

+ I've also worked extensively with Microsoft Dynamics AX, Odoo ERP, business process automation, analytics, cloud infrastructure, and enterprise architecture. +

+

+ This combination of business knowledge and software engineering influences every template and application sold here. The goal isn't simply to make the code compile. The goal is to make it useful in real projects. +

+
+
+
+
+ + +
+
+
+
+ Philosophy +
+

My Philosophy

+
+
+

+ I believe software should be: +

+
+
+ + Easy to understand +
+
+ + Easy to extend +
+
+ + Built with clean architecture +
+
+ + Ready for production +
+
+ + Friendly for learning +
+
+ + Compatible with AI-assisted development +
+
+

+ Whether you're a university student building your final project, a junior developer starting your career, a freelancer delivering client work, or a startup creating its MVP, I hope these projects can save you valuable time. +

+
+
+
+ + +
+
+
+
+ Behind the Store +
+

A Real Person Behind This Website

+
+
+
+

+ This store operates from a modest office in Bandung, Indonesia. +

+
+

Office Address

+

+ JL. Graha Kencana Blok G1 No. 13
+ Batujajar
+ Kabupaten Bandung Barat
+ Indonesia +

+
+

+ If you send an email, it comes directly to me. If you report a bug, I read it. If you suggest an improvement, I seriously consider it. +

+

+ There is no marketing department. No sales team. No outsourced support. Just one developer who genuinely enjoys building useful software. +

+
+
+
+
+
+ During college at ITB +
+
+
+
+ During college at ITB +
+
+
+
+ During college at ITB +
+
+
+

From my student days at ITB (Institut Teknologi Bandung) — a very long time ago

+
+
+
+
+ + +
+
+
+
+ Thank You +
+

Thank You

+

+ If you've purchased one of my products, thank you. You're not only buying source code. You're supporting an independent developer who continues to believe that well-crafted software still matters—even in the age of AI. +

+

+ My goal has never been to compete with artificial intelligence. Instead, it's to build strong foundations that help developers—and AI—create better software together. +

+

+ I hope one of these projects becomes the starting point for your next great application. Thank you for visiting, and I sincerely appreciate your support. +

+ +
+

Online presence

+ +

github.com/go2ismail · linkedin.com/in/go2ismail

+
+
+
+
+ + + + + + + + + + + + \ No newline at end of file diff --git a/img_about/aboutme-covid-strie-new-bag-for-school.jpg b/img_about/aboutme-covid-strie-new-bag-for-school.jpg new file mode 100644 index 0000000..6116aeb Binary files /dev/null and b/img_about/aboutme-covid-strie-new-bag-for-school.jpg differ diff --git a/img_about/aboutme-covid-strike-onthetrain.jpg b/img_about/aboutme-covid-strike-onthetrain.jpg new file mode 100644 index 0000000..4dd6ee0 Binary files /dev/null and b/img_about/aboutme-covid-strike-onthetrain.jpg differ diff --git a/img_about/aboutme-during-college-at-ITB-institut-teknologi-bandung-0.jpg b/img_about/aboutme-during-college-at-ITB-institut-teknologi-bandung-0.jpg new file mode 100644 index 0000000..f65a43b Binary files /dev/null and b/img_about/aboutme-during-college-at-ITB-institut-teknologi-bandung-0.jpg differ diff --git a/img_about/aboutme-during-college-at-ITB-institut-teknologi-bandung-1.jpg b/img_about/aboutme-during-college-at-ITB-institut-teknologi-bandung-1.jpg new file mode 100644 index 0000000..4892b22 Binary files /dev/null and b/img_about/aboutme-during-college-at-ITB-institut-teknologi-bandung-1.jpg differ diff --git a/img_about/aboutme-during-college-at-ITB-institut-teknologi-bandung-2.jpg b/img_about/aboutme-during-college-at-ITB-institut-teknologi-bandung-2.jpg new file mode 100644 index 0000000..7b976e6 Binary files /dev/null and b/img_about/aboutme-during-college-at-ITB-institut-teknologi-bandung-2.jpg differ diff --git a/img_about/aboutme-my-corporate-work-before-covid.jpg b/img_about/aboutme-my-corporate-work-before-covid.jpg new file mode 100644 index 0000000..ea0e5d6 Binary files /dev/null and b/img_about/aboutme-my-corporate-work-before-covid.jpg differ diff --git a/img_about/aboutme-my-workspace.jpg b/img_about/aboutme-my-workspace.jpg new file mode 100644 index 0000000..d07fd59 Binary files /dev/null and b/img_about/aboutme-my-workspace.jpg differ diff --git a/img_about/aboutme-portrait.jpg b/img_about/aboutme-portrait.jpg new file mode 100644 index 0000000..3b2fa5a Binary files /dev/null and b/img_about/aboutme-portrait.jpg differ diff --git a/img_paas/landing-cloudbeaver.png b/img_paas/landing-cloudbeaver.png new file mode 100644 index 0000000..d29bac9 Binary files /dev/null and b/img_paas/landing-cloudbeaver.png differ diff --git a/img_paas/landing-dozzle.png b/img_paas/landing-dozzle.png new file mode 100644 index 0000000..f6f4864 Binary files /dev/null and b/img_paas/landing-dozzle.png differ diff --git a/img_paas/landing-gitea.png b/img_paas/landing-gitea.png new file mode 100644 index 0000000..f01807d Binary files /dev/null and b/img_paas/landing-gitea.png differ diff --git a/img_paas/landing-nginx-proxy-manager.png b/img_paas/landing-nginx-proxy-manager.png new file mode 100644 index 0000000..7126339 Binary files /dev/null and b/img_paas/landing-nginx-proxy-manager.png differ diff --git a/img_paas/landing-portainer.png b/img_paas/landing-portainer.png new file mode 100644 index 0000000..c9581c8 Binary files /dev/null and b/img_paas/landing-portainer.png differ diff --git a/img_paas/real-world-cloudbeaver.png b/img_paas/real-world-cloudbeaver.png new file mode 100644 index 0000000..585d470 Binary files /dev/null and b/img_paas/real-world-cloudbeaver.png differ diff --git a/img_paas/real-world-dozzle.png b/img_paas/real-world-dozzle.png new file mode 100644 index 0000000..bcb22c1 Binary files /dev/null and b/img_paas/real-world-dozzle.png differ diff --git a/img_paas/real-world-nginx-proxy-manager.png b/img_paas/real-world-nginx-proxy-manager.png new file mode 100644 index 0000000..2c664cd Binary files /dev/null and b/img_paas/real-world-nginx-proxy-manager.png differ diff --git a/img_paas/real-world-usage-gitea.png b/img_paas/real-world-usage-gitea.png new file mode 100644 index 0000000..6d96bbb Binary files /dev/null and b/img_paas/real-world-usage-gitea.png differ diff --git a/img_paas/real-world-usage-portainer.png b/img_paas/real-world-usage-portainer.png new file mode 100644 index 0000000..eaad071 Binary files /dev/null and b/img_paas/real-world-usage-portainer.png differ diff --git a/index.html b/index.html index f892036..06ad110 100644 --- a/index.html +++ b/index.html @@ -880,8 +880,8 @@
Indotalent

Enterprise .NET 10 & Blazor complete source code. Back End + Front End in one VSA monolith. Thank you for your support.

Products
-
Resources
-
Company
+
Resources
+
Company

© 2024-2026 Indotalent. All rights reserved.

Built with by go2ismail

diff --git a/my-paas-arsenal.html b/my-paas-arsenal.html new file mode 100644 index 0000000..7750550 --- /dev/null +++ b/my-paas-arsenal.html @@ -0,0 +1,596 @@ + + + + + + + + My PaaS Arsenal — Building a Simple, Modern PaaS for 30+ ASP.NET Core Demos | INDOTALENT + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ Infrastructure +
+

+ My PaaS Arsenal +

+

+ Building a Simple, Modern, Yet Powerful PaaS Infrastructure for Hosting 30+ ASP.NET Core Demo Applications +

+

A technical deep-dive into self-hosted, container-based deployment

+
+
+
+ + +
+
+
+

+ One of the questions I receive most often is surprisingly not about C#, ASP.NET Core, or Clean Architecture. +

+

Instead, it's this:

+
+

+ “How do you host all of your live demo applications?” +

+
+

+ Today, I maintain dozens of web application demos—CRM systems, POS applications, ERP modules, HR software, inventory systems, and various reusable templates. +

+

Each application needs to be:

+
+
Available 24/7
+
Easy to update
+
Isolated from other applications
+
Protected with HTTPS
+
Connected to its own database
+
Cost-effective to operate
+
+

+ Years ago, the answer was easy. Windows Server. Microsoft IIS. Publish. Done. That changed when I migrated my entire infrastructure to Linux. Ironically, the migration wasn't driven by technology—it was driven by economics. +

+
+
+
+ + +
+
+
+
+ The Shift +
+

Why I Left Windows Server

+
+
+

+ Running dozens of demo applications on Windows Server works perfectly fine. The problem wasn't capability. It was cost. +

+

+ A VPS running Windows Server Datacenter with enough CPU and RAM to host many ASP.NET Core applications is significantly more expensive than an equivalent Linux VPS. Once your infrastructure begins growing beyond a few applications, licensing costs become difficult to ignore. +

+

I wanted something that was:

+
+ cheaper + easier to automate + container-friendly + cloud-native + capable of CI/CD + maintainable by one person +
+

+ Linux turned out to be the perfect fit. Today, the entire platform runs comfortably on a single VPS with: +

+
+
+

8

+

vCPU

+
+
+

24 GB

+

RAM

+
+
+

+ Despite hosting more than thirty applications, the server remains responsive thanks to containerization and careful resource management. The operating system is almost invisible. Docker became the real operating system. +

+
+
+
+ + +
+
+
+
+ Philosophy +
+

My Philosophy

+
+
+

+ People often imagine Platform as a Service (PaaS) as something incredibly complex. Kubernetes. Service Mesh. Helm Charts. Hundreds of YAML files. For large organizations, those technologies make sense. For an independent software developer? Probably not. +

+
+

+ “Deploy a production-ready application with a single Git push.” +

+
+

+ That's it. Everything in this infrastructure exists to support that single objective. +

+
+
+
+ + +
+
+
+
+ The Arsenal +
+

The Arsenal

+

Instead of relying on one massive platform, I assembled several focused open-source tools. Each tool does one thing exceptionally well. Together, they form a lightweight but surprisingly capable PaaS.

+
+
+
+ + +
+
+

Infrastructure Components Overview

+
+
Developer
+
Git Push
+
Gitea
+
Portainer
+
Docker Build
+
Deploy
+
Nginx Proxy
+
HTTPS Live
+
+
+
+ + +
+
+
+
+
+ Tool #1 +
+

Gitea

+

Self-Hosted Git Repository

+ about.gitea.com → +
+

Every application begins here. Gitea stores all source code repositories for my commercial and internal projects.

+

I chose Gitea because it is lightweight, fast, self-hosted, open source, and extremely easy to maintain. Running my own Git server also means complete ownership of the development workflow.

+

Every deployment begins with a Git commit.

+
+
+
+
+ Gitea landing page +
+

Gitea — lightweight self-hosted Git service

+
+
+
+
+ + +
+
+
+ Gitea real-world usage +
+

Real-world Gitea dashboard — managing multiple repositories for demo applications

+
+
+ + +
+
+
+
+
+ Tool #2 +
+

Portainer

+

Docker & Deployment Management

+ portainer.io → +
+

Portainer is the heart of the platform. Many people think Portainer is simply a Docker dashboard. It is much more than that.

+

Every application in my infrastructure is defined by a Docker Compose file stored inside its Git repository. Each stack in Portainer continuously monitors its corresponding repository. Whenever new commits arrive, Portainer automatically:

+
    +
  • pulls the latest source code
  • +
  • rebuilds the Docker image
  • +
  • recreates the container
  • +
  • deploys the updated application
  • +
+

No SSH. No manual publishing. No copying files. No Remote Desktop. Deployment becomes almost effortless. From my perspective, updating production often feels no different from committing code.

+
+
+
+
+ Portainer landing page +
+

Portainer — Docker management and CI/CD automation

+
+
+
+
+ + +
+
+
+ Portainer real-world usage +
+

Real-world Portainer dashboard — managing 30+ running containers

+
+
+ + +
+
+
+
+
+ Tool #3 +
+

Nginx Proxy Manager

+

Reverse Proxy Made Simple

+ nginxproxymanager.com → +
+

If Portainer is the heart, Nginx Proxy Manager is the traffic controller. Every application runs inside Docker. None of them expose ports directly to the internet. Instead, every container communicates through Docker's internal network.

+

This design provides several advantages. Applications can securely communicate with PostgreSQL, Microsoft SQL Server, CloudBeaver, internal APIs, and other containers without exposing database ports publicly.

+

Nginx Proxy Manager simply routes incoming HTTPS traffic to the correct container. It also automates one of the most annoying parts of hosting websites: SSL certificates. Let's Encrypt certificates are issued and renewed automatically. No manual renewal. No certificate expiration reminders. No downtime.

+
+
+
+
+ Nginx Proxy Manager landing page +
+

Nginx Proxy Manager — reverse proxy with automated SSL

+
+
+
+
+ + +
+
+
+ Nginx Proxy Manager real-world +
+

Real-world Nginx Proxy Manager — routing traffic to dozens of containers

+
+
+ + +
+
+
+
+ Data Layer +
+

PostgreSQL & Microsoft SQL Server

+
+
+

+ Different projects have different requirements. Some customers prefer PostgreSQL. Others require Microsoft SQL Server. +

+

+ Both database servers run as Docker containers inside the same private network. Applications connect using container names rather than IP addresses. Everything remains isolated from the public internet. Simple. Secure. Reliable. +

+
+
+
+ + +
+
+
+
+
+ Tool #4 +
+

CloudBeaver

+

Browser-Based Database Management

+ dbeaver.com/cloudbeaver → +
+

Managing databases through Remote Desktop or command-line tools quickly becomes inconvenient. CloudBeaver provides a modern browser-based database management interface.

+

Because it resides inside the same Docker network, it communicates directly with every database container. No SQL Server ports need to be exposed publicly. No PostgreSQL ports either.

+

Database administration can be performed securely from anywhere using only HTTPS. For me, this is one of those tools that quietly saves hours every month.

+
+
+
+
+ CloudBeaver landing page +
+

CloudBeaver — browser-based database management

+
+
+
+
+ + +
+
+
+ CloudBeaver real-world usage +
+

Real-world CloudBeaver — managing databases securely via browser

+
+
+ + +
+
+
+
+
+ Tool #5 +
+

Dozzle

+

Real-Time Docker Logs & Monitoring

+ dozzle.dev → +
+

One of my favorite discoveries. Dozzle streams Docker logs in real time through an incredibly clean web interface. It also provides quick insight into container activity and overall resource usage.

+

When one application suddenly consumes more memory than expected, or starts producing unexpected logs, I usually discover it within seconds.

+

Dozzle intentionally keeps authentication simple. Rather than exposing it publicly, I place it behind Nginx Proxy Manager and enable HTTP Basic Authentication there. This approach keeps the service private while avoiding unnecessary complexity.

+
+
+
+
+ Dozzle landing page +
+

Dozzle — real-time Docker log streaming

+
+
+
+
+ + +
+
+
+ Dozzle real-world usage +
+

Real-world Dozzle — monitoring container logs and resource usage

+
+
+ + +
+
+
+
+ Integration +
+

Putting Everything Together

+
+
+

Individually, each tool solves a small problem. Together, they create a surprisingly capable developer platform. The workflow looks like this:

+
+
Developer
+ +
Git Push
+ +
Gitea Repository
+ +
Portainer detects changes
+ +
Docker Compose Build
+ +
Container Deployment
+ +
Nginx Proxy Manager
+ +
HTTPS Live Demo
+
+

Updating an application often takes less than a minute. The deployment pipeline is almost invisible. Which is exactly how infrastructure should feel.

+
+
+
+ + +
+
+
+
+ Why It Works +
+

Why This Works So Well

+
+
+

+ This platform wasn't designed to impress DevOps engineers. It was designed to remove friction. +

+

+ As a solo developer, context switching is expensive. Every minute spent manually deploying software is a minute not spent writing software. Automation isn't about replacing people. It's about eliminating repetitive work. +

+

+ Today I spend far less time thinking about deployment than I did several years ago. That allows me to focus on what actually creates value: building applications. +

+
+
+
+ + +
+
+
+
+ Lessons +
+

Lessons Learned

+
+
+
+
+ +
+

Containers Simplify

+

Every application carries its own runtime, dependencies, and configuration. There are no "works on my machine" surprises anymore.

+
+
+
+ +
+

Private Networking

+

Almost every service communicates entirely through Docker's internal network. Very few ports are exposed to the public internet. Smaller attack surface, less configuration, greater peace of mind.

+
+
+
+ +
+

CI/CD Without K8s

+

Modern deployment pipelines can be remarkably simple. Docker Compose plus Portainer provides more than enough power without introducing unnecessary operational complexity.

+
+
+
+ +
+

Open Source Power

+

Every major component comes from passionate open-source communities. Their work enables independent developers to build infrastructure that would have required an entire operations team just a few years ago.

+
+
+
+
+ + +
+
+
+
+ Final Thoughts +
+

Final Thoughts

+

+ People often ask what cloud platform I use. The answer surprises them. +

+

+ There isn't one. Instead, I built a small, focused Platform as a Service tailored specifically to my workflow. +

+

+ It isn't the biggest. It isn't the most complicated. It certainly isn't the most expensive. +

+

+ But it quietly hosts more than thirty production demo applications, supports smooth CI/CD deployments, minimizes operational overhead, and lets me concentrate on building software instead of maintaining infrastructure. +

+
+

+ “Sometimes, the best engineering solution isn't the most sophisticated one. It's the one that stays out of your way and lets you keep creating.” +

+
+
+
+
+ + + + + + + + + + + + \ No newline at end of file