Introducing the Project Builder: A Home for My Hive Tools
Hey everyone,
As some of you have noticed, I've been building quite a few different scripts, tools, and utilities recently. Many of my web-based tools started life as one of these simple command-line scripts. I wanted to create a centralized place where you could find them all, both for easy reference and to serve as a potential starting point for your own projects.
So today, I'm happy to announce that the new Project Builder page is now live!
This page gathers many of the utilities I've built under one roof, making them easier to find and reference. My hope is that other users might find them useful as a "jump start" for their own scripts and ideas.
The "Lazy Developer" Backend
Of course, I wanted to make this page easy for me to maintain. Instead of hard-coding the list of projects into the site's HTML, which would require me to edit the code every time I add a new tool, I took a more flexible approach.
The entire list is generated dynamically by reading a simple Markdown file (project_builder.md
) on the server. To add, remove, or edit a project, all I have to do is change a single line in that text file – no need to touch the site's Python code at all!
For those who are curious, here's a snippet of the Python function in the Flask app that parses the Markdown file using regular expressions to build the project list:
def _parse_project_links():
"""Parse project_builder.md into list of dicts."""
template_root = os.path.abspath(
os.path.join(
os.path.dirname(__file__),
os.pardir,
"templates",
"hivetools",
"project_builder",
)
)
md_path = os.path.join(template_root, "project_builder.md")
links: list[dict[str, str]] = []
if not os.path.exists(md_path):
return links
# Regex to find lines like: "- [Name](url): Description"
link_pattern = re.compile(
r"^- \[(?P<name>[^\]]+)]\((?P<url>[^)]+)\):\s*(?P<desc>.+)"
)
# A legacy pattern for older formats without a URL
legacy_pattern = re.compile(r"^- \*\*`([^`]+)`\*\*:\s*(.+)")
with open(md_path, "r", encoding="utf-8") as fp:
for line in fp:
stripped = line.strip()
if not stripped.startswith("-"): # skip headers etc.
continue
if m := link_pattern.match(stripped):
links.append(
{"name": m["name"], "url": m["url"], "description": m["desc"]}
)
elif m := legacy_pattern.match(stripped):
name, desc = m.groups()
links.append({"name": name, "description": desc})
return links
It's a simple but effective way to keep the content separate from the code.
My goal is to create a resource that might help the next person get started on their great idea a little bit faster.
So, good luck and have fun building!
As always,
Michael Garcia a.k.a. TheCrazyGM
Your scripts are increasing like there is no tomorrow 👌
Keep up the great work.
Gotta love that lazy, dynamically updated backend!!
!PAKX
!PIMP
!PIZZA
View or trade
PAKX
tokens.Use !PAKX command if you hold enough balance to call for a @pakx vote on worthy posts! More details available on PAKX Blog.
$PIZZA slices delivered:
@ecoinstant(1/20) tipped @thecrazygm
Come get MOONed!
Parece un buen proyecto
I love how you're always making so many great tools, as well as making them easily accessible to help other people with their own projects. That's badass, dude, and it's much appreciated! I also dig the simple, elegant, and modular approach that you took with keeping the list of tools up to date. 😁 🙏 💚 ✨ 🤙