-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.html
More file actions
89 lines (83 loc) · 52.4 KB
/
Copy pathindex.html
File metadata and controls
89 lines (83 loc) · 52.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<!doctype html>
<html lang="en" dir="ltr" class="blog-wrapper blog-list-page plugin-blog plugin-id-default" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">Blog | Agent-first open-source admin panel framework</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://adminforth.dev/img/og.jpg"><meta data-rh="true" name="twitter:image" content="https://adminforth.dev/img/og.jpg"><meta data-rh="true" property="og:url" content="https://adminforth.dev/blog/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Blog | Agent-first open-source admin panel framework"><meta data-rh="true" name="description" content="Blog"><meta data-rh="true" property="og:description" content="Blog"><meta data-rh="true" name="docusaurus_tag" content="blog_posts_list"><meta data-rh="true" name="docsearch:docusaurus_tag" content="blog_posts_list"><meta data-rh="true" name="twitter:title" content="AdminForth Blog"><meta data-rh="true" name="twitter:description" content="AdminForth blog posts"><link data-rh="true" rel="icon" href="/img/favicon.png"><link data-rh="true" rel="canonical" href="https://adminforth.dev/blog/"><link data-rh="true" rel="alternate" href="https://adminforth.dev/blog/" hreflang="en"><link data-rh="true" rel="alternate" href="https://adminforth.dev/blog/" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://VSIPOF54AV-dsn.algolia.net" crossorigin="anonymous"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"Blog","@id":"https://adminforth.dev/blog","mainEntityOfPage":"https://adminforth.dev/blog","headline":"Blog","description":"Blog","blogPost":[{"@type":"BlogPosting","@id":"https://adminforth.dev/blog/branch-sandboxing-k3s","mainEntityOfPage":"https://adminforth.dev/blog/branch-sandboxing-k3s","url":"https://adminforth.dev/blog/branch-sandboxing-k3s","headline":"K3s Branch Sandboxing: Automating EC2 Infrastructure with GitHub Actions, Terraform, Helm & Cloudflare","name":"K3s Branch Sandboxing: Automating EC2 Infrastructure with GitHub Actions, Terraform, Helm & Cloudflare","description":"Master branch-based sandboxing! Step-by-step guide to automating K3s cluster provisioning, DNS management, and application deployments using Terraform, Helm, Cloudflare, and GitHub Actions.","datePublished":"2026-06-01T00:00:00.000Z","author":{"@type":"Person","name":"Kyrylo Doropii","description":"DevOps Engineer of AdminForth","url":"https://github.com/kirilldorr","image":"https://avatars.githubusercontent.com/u/181721742?s=96&v=4"},"keywords":[]},{"@type":"BlogPosting","@id":"https://adminforth.dev/blog/open-source-agent-existing-database","mainEntityOfPage":"https://adminforth.dev/blog/open-source-agent-existing-database","url":"https://adminforth.dev/blog/open-source-agent-existing-database","headline":"Your Database Already Breathes: Connect an Open-Source Agent to It","name":"Your Database Already Breathes: Connect an Open-Source Agent to It","description":"<iframe","datePublished":"2026-05-22T00:00:00.000Z","author":{"@type":"Person","name":"Ivan Borshchov","description":"Maintainer of AdminForth","url":"https://github.com/ivictbor","image":"https://avatars.githubusercontent.com/u/1838656?v=4"},"keywords":[]},{"@type":"BlogPosting","@id":"https://adminforth.dev/blog/k3s-ec2-deployment","mainEntityOfPage":"https://adminforth.dev/blog/k3s-ec2-deployment","url":"https://adminforth.dev/blog/k3s-ec2-deployment","headline":"IaC Simplified: K3s on EC2 Deployments with Terraform, Helm, Ansible & Amazon ECR","name":"IaC Simplified: K3s on EC2 Deployments with Terraform, Helm, Ansible & Amazon ECR","description":"The ultimate step-by-step guide to cost-effective, build-time-efficient, and easy managable EC2 deployments using K3s, Terraform, Helm, Ansible, and a Amazon ECR registry.","datePublished":"2025-11-04T00:00:00.000Z","author":{"@type":"Person","name":"Kyrylo Doropii","description":"DevOps Engineer of AdminForth","url":"https://github.com/kirilldorr","image":"https://avatars.githubusercontent.com/u/181721742?s=96&v=4"},"keywords":[]},{"@type":"BlogPosting","@id":"https://adminforth.dev/blog/context7-setup-vscode","mainEntityOfPage":"https://adminforth.dev/blog/context7-setup-vscode","url":"https://adminforth.dev/blog/context7-setup-vscode","headline":"How to set up Context7 MCP in Visual Studio Code","name":"How to set up Context7 MCP in Visual Studio Code","description":"Context7 MCP installation guide","datePublished":"2025-10-21T00:00:00.000Z","author":{"@type":"Person","name":"Yaroslav Pechorkin","description":"Developer of AdminForth","url":"https://github.com/yaroslav8765","image":"https://avatars.githubusercontent.com/u/189334989?v=4"},"keywords":[]},{"@type":"BlogPosting","@id":"https://adminforth.dev/blog/dynamic-strings-translation","mainEntityOfPage":"https://adminforth.dev/blog/dynamic-strings-translation","url":"https://adminforth.dev/blog/dynamic-strings-translation","headline":"How to translate dynamic strings in AdminForth API","name":"How to translate dynamic strings in AdminForth API","description":"Simple example of how to translate dynamic strings from database in AdminForth API","datePublished":"2025-04-10T00:00:00.000Z","author":{"@type":"Person","name":"Ivan Borshchov","description":"Maintainer of AdminForth","url":"https://github.com/ivictbor","image":"https://avatars.githubusercontent.com/u/1838656?v=4"},"keywords":[]},{"@type":"BlogPosting","@id":"https://adminforth.dev/blog/keycloak-setup-example","mainEntityOfPage":"https://adminforth.dev/blog/keycloak-setup-example","url":"https://adminforth.dev/blog/keycloak-setup-example","headline":"Setup AdminForth Authorization via Keycloak","name":"Setup AdminForth Authorization via Keycloak","description":"The ultimate guide to setting up AdminForth authorization via Keycloak","datePublished":"2025-03-25T00:00:00.000Z","author":{"@type":"Person","name":"Maksym Pipkun","description":"Developer of AdminForth","url":"https://github.com/NoOne7135","image":"https://avatars.githubusercontent.com/u/120279695?v=4"},"keywords":[]},{"@type":"BlogPosting","@id":"https://adminforth.dev/blog/compose-aws-ec2-ecr-terraform-github-actions","mainEntityOfPage":"https://adminforth.dev/blog/compose-aws-ec2-ecr-terraform-github-actions","url":"https://adminforth.dev/blog/compose-aws-ec2-ecr-terraform-github-actions","headline":"IaaC Simplified: Amazon EC2 Deployments with GitHub Actions, Terraform, Docker & Amazon ECR","name":"IaaC Simplified: Amazon EC2 Deployments with GitHub Actions, Terraform, Docker & Amazon ECR","description":"The ultimate step-by-step guide to cost-effective, build-time-efficient, and easy managable EC2 deployments using GitHub Actions, Terraform, Docker, and a Amazon ECR registry.","datePublished":"2025-02-19T00:00:00.000Z","author":{"@type":"Person","name":"Ivan Borshchov","description":"Maintainer of AdminForth","url":"https://github.com/ivictbor","image":"https://avatars.githubusercontent.com/u/1838656?v=4"},"image":{"@type":"ImageObject","@id":"https://adminforth.dev/ogs/ga-tf-ecr.jpg","url":"https://adminforth.dev/ogs/ga-tf-ecr.jpg","contentUrl":"https://adminforth.dev/ogs/ga-tf-ecr.jpg","caption":"title image for the blog post: IaaC Simplified: Amazon EC2 Deployments with GitHub Actions, Terraform, Docker & Amazon ECR"},"keywords":[]},{"@type":"BlogPosting","@id":"https://adminforth.dev/blog/compose-ec2-deployment-github-actions-registry","mainEntityOfPage":"https://adminforth.dev/blog/compose-ec2-deployment-github-actions-registry","url":"https://adminforth.dev/blog/compose-ec2-deployment-github-actions-registry","headline":"Amazon EC2 Deployments with GitHub Actions, Terraform, Docker & Self-hosted Registry","name":"Amazon EC2 Deployments with GitHub Actions, Terraform, Docker & Self-hosted Registry","description":"The ultimate step-by-step guide to cost-effective, build-time-efficient, and easy managable EC2 deployments using GitHub Actions, Terraform, Docker, and a self-hosted registry.","datePublished":"2025-02-19T00:00:00.000Z","author":{"@type":"Person","name":"Ivan Borshchov","description":"Maintainer of AdminForth","url":"https://github.com/ivictbor","image":"https://avatars.githubusercontent.com/u/1838656?v=4"},"image":{"@type":"ImageObject","@id":"https://adminforth.dev/ogs/ga-tf-aws.jpg","url":"https://adminforth.dev/ogs/ga-tf-aws.jpg","contentUrl":"https://adminforth.dev/ogs/ga-tf-aws.jpg","caption":"title image for the blog post: Amazon EC2 Deployments with GitHub Actions, Terraform, Docker & Self-hosted Registry"},"keywords":[]},{"@type":"BlogPosting","@id":"https://adminforth.dev/blog/how-i-opensourced-my-secret-tokens","mainEntityOfPage":"https://adminforth.dev/blog/how-i-opensourced-my-secret-tokens","url":"https://adminforth.dev/blog/how-i-opensourced-my-secret-tokens","headline":"How I Open-Sourced My Secret Access Tokens from GitHub, Slack, and NPM — and Who Actually Cares","name":"How I Open-Sourced My Secret Access Tokens from GitHub, Slack, and NPM — and Who Actually Cares","description":"Our framework has a CI pipeline that runs npm run build, publishes the package to NPM (npm publish), and creates a new release on GitHub. It also sends a notification about the release to a Slack webhook for our team.","datePublished":"2025-01-24T00:00:00.000Z","author":{"@type":"Person","name":"Ivan Borshchov","description":"Maintainer of AdminForth","url":"https://github.com/ivictbor","image":"https://avatars.githubusercontent.com/u/1838656?v=4"},"keywords":[]},{"@type":"BlogPosting","@id":"https://adminforth.dev/blog/why-manual-release-notes-and-versions-are-a-chaos-and-how-to-fix-it","mainEntityOfPage":"https://adminforth.dev/blog/why-manual-release-notes-and-versions-are-a-chaos-and-how-to-fix-it","url":"https://adminforth.dev/blog/why-manual-release-notes-and-versions-are-a-chaos-and-how-to-fix-it","headline":"Why manual Release Notes and Versions are a chaos and how to fix it","name":"Why manual Release Notes and Versions are a chaos and how to fix it","description":"Learn what profits you can get from automatic versioning and learn how simply you can configure it!","datePublished":"2025-01-19T00:00:00.000Z","author":{"@type":"Person","name":"Ivan Borshchov","description":"Maintainer of AdminForth","url":"https://github.com/ivictbor","image":"https://avatars.githubusercontent.com/u/1838656?v=4"},"image":{"@type":"ImageObject","@id":"https://adminforth.dev/ogs/autover.jpg","url":"https://adminforth.dev/ogs/autover.jpg","contentUrl":"https://adminforth.dev/ogs/autover.jpg","caption":"title image for the blog post: Why manual Release Notes and Versions are a chaos and how to fix it"},"keywords":[]}]}</script><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"CollectionPage","headline":"AdminForth Blog","description":"AdminForth blog posts","url":"https://adminforth.dev/blog","dateModified":"2026-08-17T05:04:46.336Z"}</script><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Agent-first open-source admin panel framework RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Agent-first open-source admin panel framework Atom Feed">
<link rel="preconnect" href="https://www.google-analytics.com">
<link rel="preconnect" href="https://www.googletagmanager.com">
<script async src="https://www.googletagmanager.com/gtag/js?id=G-7K99Q2BH04"></script>
<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-7K99Q2BH04",{anonymize_ip:!0})</script>
<link rel="search" type="application/opensearchdescription+xml" title="Agent-first open-source admin panel framework" href="/opensearch.xml">
<meta name="application-name" content="AdminForth">
<meta name="robots" content="index,follow,max-image-preview:large,max-snippet:-1,max-video-preview:-1">
<meta name="googlebot" content="index,follow,max-image-preview:large,max-snippet:-1,max-video-preview:-1">
<meta name="keywords" content="agent-first admin panel framework, open-source admin panel, agentic back office, tailwind admin framework, vue typescript admin panel, internal admin agent">
<link rel="image_src" href="https://adminforth.dev/img/adminforth_screenshot.png">
<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"AdminForth","url":"https://adminforth.dev","description":"Agent-first open-source admin panel framework. Build robust and powerful agentic back-office panels for your projects while maintaining full control over the code.","keywords":"backoffice, vue backoffice, agent-first admin panel framework, open-source admin panel, agentic back office, tailwind admin framework, vue typescript admin panel, internal admin agent"}</script>
<script src="/scripts/adminforth.js"></script>
<script src="/scripts/tluma-config.js"></script>
<script src="https://tluma.ai/widget.js" async></script><link rel="stylesheet" href="/assets/css/styles.e5bdffa0.css">
<script src="/assets/js/runtime~main.ee0f97d0.js" defer="defer"></script>
<script src="/assets/js/main.a1324122.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.svg" alt="AdminForth Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/logo.svg" alt="AdminForth Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">AdminForth</b></a><a class="navbar__item navbar__link" href="/docs/tutorial/gettingStarted/">Tutorial</a><a class="navbar__item navbar__link" href="/docs/api/">API</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/blog/">Blog</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><div class="navbarSearchContainer_Bca1"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search (Command+K)"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20" aria-hidden="true"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div><a href="https://demo.adminforth.dev/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Live Demo<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><a href="https://github.com/devforth/adminforth" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">Recent posts</div><div role="group"><h3 class="yearGroupHeading_rMGB">2026</h3><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/branch-sandboxing-k3s/">K3s Branch Sandboxing: Automating EC2 Infrastructure with GitHub Actions, Terraform, Helm & Cloudflare</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/open-source-agent-existing-database/">Your Database Already Breathes: Connect an Open-Source Agent to It</a></li></ul></div><div role="group"><h3 class="yearGroupHeading_rMGB">2025</h3><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/k3s-ec2-deployment/">IaC Simplified: K3s on EC2 Deployments with Terraform, Helm, Ansible & Amazon ECR</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/context7-setup-vscode/">How to set up Context7 MCP in Visual Studio Code</a></li><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/dynamic-strings-translation/">How to translate dynamic strings in AdminForth API</a></li></ul></div></nav></aside><main class="col col--7"><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/branch-sandboxing-k3s/">K3s Branch Sandboxing: Automating EC2 Infrastructure with GitHub Actions, Terraform, Helm & Cloudflare</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2026-06-01T00:00:00.000Z">June 1, 2026</time> · <!-- -->20 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/kirilldorr" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo authorImage_XqGP" src="https://avatars.githubusercontent.com/u/181721742?s=96&v=4" alt="Kyrylo Doropii"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://github.com/kirilldorr" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Kyrylo Doropii</span></a></div><small class="authorTitle_nd0D" title="DevOps Engineer of AdminForth">DevOps Engineer of AdminForth</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><p>“Branch-based sandboxing” is a revolutionary approach to development that allows teams to create isolated environments—as close as possible to production—for each feature branch. This ensures that code changes are tested under realistic conditions before being merged into the main branch, which helps avoid issues like “it works on my machine” and ensures deployment stability.
The implementation described in this post covers the automatic creation of an isolated development/testing environment using the resources of an existing EC2 instance, as well as the scaling of those resources in the event of a shortage.</p>
<p>This guide covers:</p>
<ul>
<li class="">Automated EC2 infrastructure provisioning using Terraform</li>
<li class="">K3s cluster installation and setup on EC2</li>
<li class="">Cloudflare DNS management for custom domains</li>
<li class="">GitHub Actions workflows for automated deployments and cleanup</li>
<li class="">Monitoring and management practices</li>
</ul></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" title="Amazon Web Services (AWS) is a cloud computing platform that provides a wide range of services for building and deploying applications." class="tag_zVej tagRegular_sFm0" href="/blog/tags/aws/">AWS</a></li><li class="tag_QGVx"><a rel="tag" title="Terraform is an open-source infrastructure as code software tool created by HashiCorp that enables users to define and provision data center infrastructure using a declarative configuration language." class="tag_zVej tagRegular_sFm0" href="/blog/tags/terraform/">Terraform</a></li><li class="tag_QGVx"><a rel="tag" title="The package manager for Kubernetes" class="tag_zVej tagRegular_sFm0" href="/blog/tags/helm/">Helm</a></li><li class="tag_QGVx"><a rel="tag" title="Helmfile is a declarative tool for managing multiple Helm charts, making it easier to deploy and manage complex Kubernetes applications." class="tag_zVej tagRegular_sFm0" href="/blog/tags/helmfile/">Helmfile</a></li><li class="tag_QGVx"><a rel="tag" title="k3s is a lightweight version of k8s (kubernetes) that is also used for container orchestration but uses fewer resources." class="tag_zVej tagRegular_sFm0" href="/blog/tags/k3s/">k3s</a></li><li class="tag_QGVx"><a rel="tag" title="Cloudflare is a web infrastructure and security company that provides a range of services for websites and applications." class="tag_zVej tagRegular_sFm0" href="/blog/tags/cloudflare/">Cloudflare</a></li><li class="tag_QGVx"><a rel="tag" title="GitHub Actions is a continuous integration and continuous deployment (CI/CD) service provided by GitHub that allows you to automate your software development workflows." class="tag_zVej tagRegular_sFm0" href="/blog/tags/github-actions/">GitHub Actions</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about K3s Branch Sandboxing: Automating EC2 Infrastructure with GitHub Actions, Terraform, Helm & Cloudflare" href="/blog/branch-sandboxing-k3s/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/open-source-agent-existing-database/">Your Database Already Breathes: Connect an Open-Source Agent to It</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2026-05-22T00:00:00.000Z">May 22, 2026</time> · <!-- -->7 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/ivictbor" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo authorImage_XqGP" src="https://avatars.githubusercontent.com/u/1838656?v=4" alt="Ivan Borshchov"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://github.com/ivictbor" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Ivan Borshchov</span></a></div><small class="authorTitle_nd0D" title="Maintainer of AdminForth">Maintainer of AdminForth</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin-bottom:2rem"><iframe src="https://www.youtube.com/embed/4tB8uzY__uk" title="AdminForth video demo" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" style="position:absolute;inset:0;width:100%;height:100%;border:0"></iframe></div>
<p>Your data is already there.
Your database is already breathing.
But your back office is still buried under weeks of repetitive work.</p>
<p>AdminForth breaks the cage.</p>
<p>It lets you build secure, powerful, agent-ready admin panels on top of your existing database without surrendering your code, your architecture, or your freedom to a closed SaaS.</p>
<p>Not a rented dashboard.
Not another CRUD graveyard.
Not a black box between you and your data.</p>
<p>Your back office. Your rules. Your agents.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" title="Agent workflows combine LLMs, tools, and application context to perform useful work inside software systems." class="tag_zVej tagRegular_sFm0" href="/blog/tags/agent/">Agent</a></li><li class="tag_QGVx"><a rel="tag" title="Databases store the business data that AdminForth exposes through resources, permissions, workflows, and agent tooling." class="tag_zVej tagRegular_sFm0" href="/blog/tags/database/">Database</a></li><li class="tag_QGVx"><a rel="tag" title="Plugins are extensions that add new features or functionality to a AdminForth." class="tag_zVej tagRegular_sFm0" href="/blog/tags/plugin/">Plugin</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Your Database Already Breathes: Connect an Open-Source Agent to It" href="/blog/open-source-agent-existing-database/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/k3s-ec2-deployment/">IaC Simplified: K3s on EC2 Deployments with Terraform, Helm, Ansible & Amazon ECR</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2025-11-04T00:00:00.000Z">November 4, 2025</time> · <!-- -->14 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/kirilldorr" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo authorImage_XqGP" src="https://avatars.githubusercontent.com/u/181721742?s=96&v=4" alt="Kyrylo Doropii"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://github.com/kirilldorr" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Kyrylo Doropii</span></a></div><small class="authorTitle_nd0D" title="DevOps Engineer of AdminForth">DevOps Engineer of AdminForth</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><p>This guide shows how to deploy own Docker apps (with AdminForth as example) to Amazon EC2 instance with K3s and Terraform involving pushing images into Amazon ECR.</p>
<p>Needed resources:</p>
<ul>
<li class="">AWS account where we will auto-spawn EC2 instance. We will use <code>t3a.small</code> instance (2 vCPUs, 2GB RAM) which costs <code>~14$</code> per month in <code>us-west-2</code> region (cheapest region). Also it will take <code>$2</code> per month for EBS gp2 storage (20GB) for EC2 instance.</li>
<li class="">Also AWS ECR will charge for <code>$0.09</code> per GB of data egress traffic (from EC2 to the internet) - this needed to load docker build cache.</li>
</ul>
<p>The setup shape:</p>
<ul>
<li class="">Build is done using IaaC approach with HashiCorp Terraform, so almoast no manual actions are needed from you. Every resource including EC2 server instance is described in code which is commited to repo.</li>
<li class="">Docker images and build cache are stored on Amazon ECR</li>
<li class="">Total build time for average commit to AdminForth app (with Vite rebuilds) is around 3 minutes.</li>
</ul></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" title="Amazon Web Services (AWS) is a cloud computing platform that provides a wide range of services for building and deploying applications." class="tag_zVej tagRegular_sFm0" href="/blog/tags/aws/">AWS</a></li><li class="tag_QGVx"><a rel="tag" title="Terraform is an open-source infrastructure as code software tool created by HashiCorp that enables users to define and provision data center infrastructure using a declarative configuration language." class="tag_zVej tagRegular_sFm0" href="/blog/tags/terraform/">Terraform</a></li><li class="tag_QGVx"><a rel="tag" title="The package manager for Kubernetes" class="tag_zVej tagRegular_sFm0" href="/blog/tags/helm/">Helm</a></li><li class="tag_QGVx"><a rel="tag" title="k3s is a lightweight version of k8s (kubernetes) that is also used for container orchestration but uses fewer resources." class="tag_zVej tagRegular_sFm0" href="/blog/tags/k3s/">k3s</a></li><li class="tag_QGVx"><a rel="tag" title="Ansible is an open-source automation tool used for configuration management, application deployment, and task automation." class="tag_zVej tagRegular_sFm0" href="/blog/tags/ansible/">Ansible</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about IaC Simplified: K3s on EC2 Deployments with Terraform, Helm, Ansible & Amazon ECR" href="/blog/k3s-ec2-deployment/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/context7-setup-vscode/">How to set up Context7 MCP in Visual Studio Code</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2025-10-21T00:00:00.000Z">October 21, 2025</time> · <!-- -->2 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/yaroslav8765" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo authorImage_XqGP" src="https://avatars.githubusercontent.com/u/189334989?v=4" alt="Yaroslav Pechorkin"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://github.com/yaroslav8765" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Yaroslav Pechorkin</span></a></div><small class="authorTitle_nd0D" title="Developer of AdminForth">Developer of AdminForth</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><p>This guide shows how you can set up Context7 MCP in your Visual Studio Code IDE (VS Code)</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" title="Context7 provides MCP-powered library and API documentation access for coding assistants." class="tag_zVej tagRegular_sFm0" href="/blog/tags/context7/">Context7</a></li><li class="tag_QGVx"><a rel="tag" title="Model Context Protocol is a standard way for tools and assistants to connect to external capabilities and data sources." class="tag_zVej tagRegular_sFm0" href="/blog/tags/mcp/">MCP</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about How to set up Context7 MCP in Visual Studio Code" href="/blog/context7-setup-vscode/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/dynamic-strings-translation/">How to translate dynamic strings in AdminForth API</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2025-04-10T00:00:00.000Z">April 10, 2025</time> · <!-- -->6 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/ivictbor" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo authorImage_XqGP" src="https://avatars.githubusercontent.com/u/1838656?v=4" alt="Ivan Borshchov"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://github.com/ivictbor" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Ivan Borshchov</span></a></div><small class="authorTitle_nd0D" title="Maintainer of AdminForth">Maintainer of AdminForth</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><p>When you are using <a href="https://adminforth.dev/docs/tutorial/Plugins/i18n/#translating-external-application" target="_blank" rel="noopener noreferrer" class="">AdminForth i18n plugin for external Apps translation</a> you might face a case when you need to translate some data stored in your database which potentially can be changed in future.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" title="Keycloak is an open-source identity and access management solution for modern applications and services." class="tag_zVej tagRegular_sFm0" href="/blog/tags/keycloak/">Keycloak</a></li><li class="tag_QGVx"><a rel="tag" title="Authentication is the process of verifying the identity of a user or system. Authentication is a critical component of security in software applications and systems." class="tag_zVej tagRegular_sFm0" href="/blog/tags/auth/">Auth</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about How to translate dynamic strings in AdminForth API" href="/blog/dynamic-strings-translation/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/keycloak-setup-example/">Setup AdminForth Authorization via Keycloak</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2025-03-25T00:00:00.000Z">March 25, 2025</time> · <!-- -->3 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/NoOne7135" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo authorImage_XqGP" src="https://avatars.githubusercontent.com/u/120279695?v=4" alt="Maksym Pipkun"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://github.com/NoOne7135" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Maksym Pipkun</span></a></div><small class="authorTitle_nd0D" title="Developer of AdminForth">Developer of AdminForth</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><p>Keycloak is an open-source identity and access management solution that provides authentication and authorization services. It can be used to secure applications and services by managing user identities, roles, and permissions.</p>
<p>In this guide, we will walk you through the process of setting up AdminForth authorization via Keycloak. Most important we will show you how to set up Keycloak in a Docker container and configure it to work with AdminForth.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" title="Keycloak is an open-source identity and access management solution for modern applications and services." class="tag_zVej tagRegular_sFm0" href="/blog/tags/keycloak/">Keycloak</a></li><li class="tag_QGVx"><a rel="tag" title="Authentication is the process of verifying the identity of a user or system. Authentication is a critical component of security in software applications and systems." class="tag_zVej tagRegular_sFm0" href="/blog/tags/auth/">Auth</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Setup AdminForth Authorization via Keycloak" href="/blog/keycloak-setup-example/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/compose-aws-ec2-ecr-terraform-github-actions/">IaaC Simplified: Amazon EC2 Deployments with GitHub Actions, Terraform, Docker & Amazon ECR</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2025-02-19T00:00:00.000Z">February 19, 2025</time> · <!-- -->20 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/ivictbor" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo authorImage_XqGP" src="https://avatars.githubusercontent.com/u/1838656?v=4" alt="Ivan Borshchov"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://github.com/ivictbor" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Ivan Borshchov</span></a></div><small class="authorTitle_nd0D" title="Maintainer of AdminForth">Maintainer of AdminForth</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><p><img decoding="async" loading="lazy" alt="alt text" src="/assets/images/ga-tf-ecr-87ced7681bcc3685f507cc9252bc0ffe.jpg" width="1200" height="630" class="img_ev3q"></p>
<p>This guide shows how to deploy own Docker apps (with AdminForth as example) to Amazon EC2 instance with Docker and Terraform involving pushing images into Amazon ECR.</p>
<p>Needed resources:</p>
<ul>
<li class="">GitHub actions Free plan which includes 2000 minutes per month (1000 of 2-minute builds per month - more then enough for many projects, if you are not running tests). Extra builds would cost <code>0.008$</code> per minute.</li>
<li class="">AWS account where we will auto-spawn EC2 instance. We will use <code>t3a.small</code> instance (2 vCPUs, 2GB RAM) which costs <code>~14$</code> per month in <code>us-east-1</code> region (cheapest region). Also it will take <code>$2</code> per month for EBS gp2 storage (20GB) for EC2 instance.</li>
<li class="">Also AWS ECR will charge for <code>$0.09</code> per GB of data egress traffic (from EC2 to the internet) - this needed to load docker build cache.</li>
</ul>
<p>The setup shape:</p>
<ul>
<li class="">Build is done using IaaC approach with HashiCorp Terraform, so almoast no manual actions are needed from you. Every resource including EC2 server instance is described in code which is commited to repo.</li>
<li class="">Docker build process is done on GitHub actions server, so EC2 server is not overloaded with builds</li>
<li class="">Changes in infrastructure including changing server type, adding S3 Bucket, changing size of sever disk is also can be done by commiting code to repo.</li>
<li class="">Docker images and build cache are stored on Amazon ECR</li>
<li class="">Total build time for average commit to AdminForth app (with Vite rebuilds) is around 2 minutes.</li>
</ul></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" title="Amazon Web Services (AWS) is a cloud computing platform that provides a wide range of services for building and deploying applications." class="tag_zVej tagRegular_sFm0" href="/blog/tags/aws/">AWS</a></li><li class="tag_QGVx"><a rel="tag" title="Terraform is an open-source infrastructure as code software tool created by HashiCorp that enables users to define and provision data center infrastructure using a declarative configuration language." class="tag_zVej tagRegular_sFm0" href="/blog/tags/terraform/">Terraform</a></li><li class="tag_QGVx"><a rel="tag" title="GitHub Actions is a continuous integration and continuous deployment (CI/CD) service provided by GitHub that allows you to automate your software development workflows." class="tag_zVej tagRegular_sFm0" href="/blog/tags/github-actions/">GitHub Actions</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about IaaC Simplified: Amazon EC2 Deployments with GitHub Actions, Terraform, Docker & Amazon ECR" href="/blog/compose-aws-ec2-ecr-terraform-github-actions/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/compose-ec2-deployment-github-actions-registry/">Amazon EC2 Deployments with GitHub Actions, Terraform, Docker & Self-hosted Registry</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2025-02-19T00:00:00.000Z">February 19, 2025</time> · <!-- -->16 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/ivictbor" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo authorImage_XqGP" src="https://avatars.githubusercontent.com/u/1838656?v=4" alt="Ivan Borshchov"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://github.com/ivictbor" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Ivan Borshchov</span></a></div><small class="authorTitle_nd0D" title="Maintainer of AdminForth">Maintainer of AdminForth</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><p><img decoding="async" loading="lazy" alt="alt text" src="/assets/images/ga-tf-aws-fd1b40a236f46c0ffc8c09ef37abaf38.jpg" width="1200" height="630" class="img_ev3q"></p>
<p>This guide is a hackers extended addition of <a class="" href="/blog/compose-aws-ec2-ecr-terraform-github-actions/">Deploying AdminForth to EC2 with Amazon ECR</a>. The key difference in this post that we will not use Amazon ECR but self-host registry on EC2 itself. Automatically from terraform. And will see whether we will win something in terms of build time.</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" title="Amazon Web Services (AWS) is a cloud computing platform that provides a wide range of services for building and deploying applications." class="tag_zVej tagRegular_sFm0" href="/blog/tags/aws/">AWS</a></li><li class="tag_QGVx"><a rel="tag" title="Terraform is an open-source infrastructure as code software tool created by HashiCorp that enables users to define and provision data center infrastructure using a declarative configuration language." class="tag_zVej tagRegular_sFm0" href="/blog/tags/terraform/">Terraform</a></li><li class="tag_QGVx"><a rel="tag" title="GitHub Actions is a continuous integration and continuous deployment (CI/CD) service provided by GitHub that allows you to automate your software development workflows." class="tag_zVej tagRegular_sFm0" href="/blog/tags/github-actions/">GitHub Actions</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Amazon EC2 Deployments with GitHub Actions, Terraform, Docker & Self-hosted Registry" href="/blog/compose-ec2-deployment-github-actions-registry/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/how-i-opensourced-my-secret-tokens/">How I Open-Sourced My Secret Access Tokens from GitHub, Slack, and NPM — and Who Actually Cares</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2025-01-24T00:00:00.000Z">January 24, 2025</time> · <!-- -->5 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/ivictbor" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo authorImage_XqGP" src="https://avatars.githubusercontent.com/u/1838656?v=4" alt="Ivan Borshchov"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://github.com/ivictbor" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Ivan Borshchov</span></a></div><small class="authorTitle_nd0D" title="Maintainer of AdminForth">Maintainer of AdminForth</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><p>Our framework has a CI pipeline that runs <code>npm run build</code>, publishes the package to NPM (<code>npm publish</code>), and creates a new release on GitHub. It also sends a notification about the release to a Slack webhook for our team.</p>
<p>Secrets for these services were stored in our CI’s built-in Vault (we are running a self-hosted Woodpecker CI).</p>
<p>Recently, while moving plugins to separate repositories, I decided to try <a href="https://infisical.com/" target="_blank" rel="noopener noreferrer" class="">Infisical</a> for centralized secrets management instead of the internal CI Vault. Infisical provides a self-hosted open-source solution, has a well-organized UI, and offers better access control than our CI Vault. It was important to me that I could reuse secrets across different repositories without copying them every time I created a new plugin.</p>
<p>Here’s what I did:</p></div><footer class="row docusaurus-mt-lg"><div class="col text--right"><a aria-label="Read more about How I Open-Sourced My Secret Access Tokens from GitHub, Slack, and NPM — and Who Actually Cares" href="/blog/how-i-opensourced-my-secret-tokens/"><b>Read more</b></a></div></footer></article><article class="margin-bottom--xl"><header><h2 class="title_f1Hy"><a href="/blog/why-manual-release-notes-and-versions-are-a-chaos-and-how-to-fix-it/">Why manual Release Notes and Versions are a chaos and how to fix it</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2025-01-19T00:00:00.000Z">January 19, 2025</time> · <!-- -->14 min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--12 authorCol_Hf19"><div class="avatar margin-bottom--sm"><a href="https://github.com/ivictbor" target="_blank" rel="noopener noreferrer" class="avatar__photo-link"><img class="avatar__photo authorImage_XqGP" src="https://avatars.githubusercontent.com/u/1838656?v=4" alt="Ivan Borshchov"></a><div class="avatar__intro authorDetails_lV9A"><div class="avatar__name"><a href="https://github.com/ivictbor" target="_blank" rel="noopener noreferrer"><span class="authorName_yefp" translate="no">Ivan Borshchov</span></a></div><small class="authorTitle_nd0D" title="Maintainer of AdminForth">Maintainer of AdminForth</small><div class="authorSocials_rSDt"></div></div></div></div></div></header><div class="markdown"><p>I have a feeling that after first ~600 versions of Adminforth we faced all possible issues with manual versioning and release notes.</p>
<p>Manual versioning and CHANGELOG.md is unreliable as human beings are. It is pretty easy to forget it with relevant information, forget to include some changes, forget to push it to GitHub, push it at wrong time, and many more things.</p>
<p>That is why we decided to move the idea of generating versions, and GitHub releases from git commit messages using great tool called <a href="https://semantic-release.gitbook.io/semantic-release/usage/configuration" target="_blank" rel="noopener noreferrer" class="">semantic-release</a>.</p>
<p>In this post I will explain why we did a transition from manual releases to automatic, what profits we got from it, and also will show you simple example how to do it in your project!</p></div><footer class="row docusaurus-mt-lg"><div class="col col--9"><b>Tags:</b><ul class="tags_jXut padding--none margin-left--sm"><li class="tag_QGVx"><a rel="tag" title="Git is a distributed version control system that allows multiple developers to collaborate on a project." class="tag_zVej tagRegular_sFm0" href="/blog/tags/git/">Git</a></li><li class="tag_QGVx"><a rel="tag" title="Versioning is the process of assigning unique identifiers to different versions of a software application or project." class="tag_zVej tagRegular_sFm0" href="/blog/tags/versioning/">Versioning</a></li><li class="tag_QGVx"><a rel="tag" title="NPM is a package manager for the JavaScript programming language that allows developers to share and reuse code." class="tag_zVej tagRegular_sFm0" href="/blog/tags/npm/">NPM</a></li></ul></div><div class="col text--right col--3"><a aria-label="Read more about Why manual Release Notes and Versions are a chaos and how to fix it" href="/blog/why-manual-release-notes-and-versions-are-a-chaos-and-how-to-fix-it/"><b>Read more</b></a></div></footer></article><nav class="pagination-nav" aria-label="Blog list page navigation"><a class="pagination-nav__link pagination-nav__link--next" href="/blog/page/2/"><div class="pagination-nav__label">Older entries</div></a></nav></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/tutorial/gettingStarted/">Tutorial</a></li><li class="footer__item"><a href="https://demo.adminforth.dev/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Live Demo</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/">API</a></li><li class="footer__item"><a class="footer__link-item" href="/blog/archive/">Blog Archive</a></li><li class="footer__item"><a class="footer__link-item" href="/search/">Find anything</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://devforth.io" target="_blank" rel="noopener noreferrer" class="footer__link-item">DevForth.io<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://devforth.io/contact" target="_blank" rel="noopener noreferrer" class="footer__link-item">We can develop admin panel for your project<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/devforth/adminforth" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2026 Devforth sp. z o.o.</div></div></div></footer></div>
</body>
</html>