Compare commits

...

14 Commits

Author SHA1 Message Date
mi
72c39d33f0 📝 witch seasoning
Some checks failed
Deploy to VM / deploy (push) Failing after 7s
2025-11-27 21:26:11 +10:00
mi
8de384f428 📝 about typo
Some checks failed
Deploy to VM / deploy (push) Has been cancelled
2025-11-20 23:26:33 +10:00
mi
7118cd33ea 📝 projects
Some checks failed
Deploy to VM / deploy (push) Has been cancelled
2025-11-20 23:25:46 +10:00
mi
13b3a496a8 📝 some more now
Some checks failed
Deploy to VM / deploy (push) Has been cancelled
2025-11-20 23:20:16 +10:00
mi
001597ad82 📝 now
Some checks failed
Deploy to VM / deploy (push) Has been cancelled
2025-11-20 23:00:48 +10:00
mi
51d69487b9 📝 slight formatting change
Some checks failed
Deploy to VM / deploy (push) Has been cancelled
2025-11-20 22:36:58 +10:00
mi
98278c443a 📝 about
Some checks failed
Deploy to VM / deploy (push) Has been cancelled
2025-11-20 22:21:39 +10:00
mi
b65424a810 📝 add pencilbooth
Some checks failed
Deploy to VM / deploy (push) Has been cancelled
2025-11-20 22:15:06 +10:00
mi
158613cb52 📝 one of the phrases
Some checks failed
Deploy to VM / deploy (push) Has been cancelled
2025-11-20 22:10:23 +10:00
mi
65ea907c73 📝 uses
Some checks failed
Deploy to VM / deploy (push) Has been cancelled
2025-11-20 22:07:58 +10:00
mi
b3ad6d7114 💄 bolder for some font styles
Some checks failed
Deploy to VM / deploy (push) Has been cancelled
2025-11-20 21:21:54 +10:00
mi
7c819bc923 💄 block quote style 2025-11-20 21:19:46 +10:00
mi
e001c18cf6 🔨 watch build script 2025-11-20 20:34:58 +10:00
mi
44cb4045ba 💄 update base bg colors 2025-11-20 20:34:43 +10:00
7 changed files with 333 additions and 10 deletions

View File

@@ -1 +1,11 @@
# About
Puercito Fiction is a series of creative projects linked from this same
homepage. For now, that is mainly web comics. The first of which is
[She's Perfect, Actually!](https://shes-perfect-actually.puercito.net),
a slice-of-gag strip following two silly ladies in a relationship.
Really, one web comic.
The person behind it all is happily hiding behind a curtain. Please pay no
attention them.

View File

@@ -0,0 +1,53 @@
# "What are you up to now?"
This page describes what I am currently up to. You can find other
"Now" pages on [nownownow.com](https://nownownow.com).
> Updated on Thursday, 20th of November, 2025
# Getting Started
I am doing the preparation for Puercito Fiction: setting up the website(s), signing up for accounts,
figuring out a publishing workflow, etc.
Once all that is settled, I will focus on sharing what I am working on. By that, I mean more word-of-mouth stuff (e.g. family/friends, group chats, small
communities).
# Comics
I am publishing [She's Perfect, Actually!](https://shes-perfect-actually.puercito.net), a gag web comic about
a couple of silly ladies in a relationship.
This is moreso practice for getting into the regular habit of planning, drawing, and sharing entries on a regular basis. That said,
I do like the idea of the strip morphing into something a little more narrative driven and even experimental
at some point. For now, I am keeping things focused by making one strip per week. This is the easiest way to
manage with a day job consisting of weird hours and other hobbies I have outside this site.
## Eventually
I will be putting out a proper, narrative web comic. The current conundrum is figuring out which one. I am caught
between two ideas:
* A dramedy about a college freshmen who finds herself navigating life after they inexplicably being turned into a boy.
* A parable about a widow being banished from her village in post-Crusades Greece and being tormented by an unseen pursuer.
This being the internet, I wager which one of these would be more interesting to folks. Neither premise is intended to be
particularly long-lasting. Though, I am aware how infamous such intentions are for webcomics. That is why I am carefully
planning ahead.
These stories will be told vignette style, I reckon. Time is a precious thing and I want to tell the parts I care about.
This is all to say that both stories will be told! It is just a matter of which order and when. Watch this space.
# Planning
As you may have guessed, I have a lot on my mind for what to deliver. Write now I'm creating outlines and schedules.
Pretty soon I will be executing!
# Philosophy
I, like many people, am completely over platforms. Thus, I am striving to use smaller alternatives, ideally local.
Where I can, I am self-hosting solutions. For everything else, I am producing it myself.
More than anything, I am harkening back to a time where the internet was more informal, less important, and less
disruptive. A tad naive, but its a nice thought.

View File

@@ -0,0 +1,30 @@
# Projects
Outside of comics, I have a some things going on. More creative stuff, mostly technical.
# Witch Seasoning
I have been working on writing a novel. Actually, I have the first draft completed. 40% of its content has been
cut down from a word total of 130K words. Now I am onto the revising the work independently: consolidating plot
points, refining language, etc.
Once I am onto a second draft, I think I'll open up expressions of interest for beta readers. Watch this space!
# Sunday
Sunday is a convenient website template for webcomics. It does _all_ the things.
If you want to know in detail what it offers, checkout the [readme](https://git.puercito.net/mi/sunday).
Though, you're probably better off seeing it in action with [She's Perfect, Actually!](https://shes-perfect-actually.puercito.net)
This project was born from a need to have easily replicated features for my (eventual) web comics. Originally,
I was going to use [Rarebit](https://rarebit.neocities.org/). But when I found myself tinkering the code, I
found I was practically rewriting the whole thing. So, I started from scratch. It is still a wonderful tool,
though! Far friendlier to beginners than Sunday is, if I'm being honest.
# puercito.net
I consider the management of this site (and all subdomains) a project in and of itself. It's all sitting on a virtual machine where I manually
configure all the things. That's a heap of responsibility this day in age when you consider how many platforms automate
this stuff on your behalf. But I don't want to deal with them!
btw, the source code for this particular page is [open source](https://git.puercito.net/mi/hola).

View File

@@ -0,0 +1,83 @@
# "What do you use?"
It's always fun to see what tools other folks are using. This is my
page to do the same. What you see is what I use for my various projects.
> Updated on Thursday, 20th of November, 2025
# Art
For all of my digital drawing and painting, I use Procreate for iPad with an Apple Pencil. _Surprise, surprise._ Currently, I am
getting used to the [Comic Junkies Toolkit for Procreate](https://www.retrosupply.co/products/comic-junkies-toolkit-for-procreate)
by RetroSupply Co.
I _do_ have a [Huion Kamvas Pro 16](https://store.huion.com/au/products/kamvas-pro-16?srsltid=AfmBOop330FPZUb_-0OODk4V3Et1I4l8Fow6zcyjevSchmh_xz1M-rGy)
that I should be using (nice find from Facebook Marketplace). But my ambition to build a new desk
is in the way of that. I will probably start using [Krita](https://krita.org/en/) once that is finally done.
My physical painting is done with either oil paints or gouache.
## Anti-AI
It is by no means bulletproof, but [Glaze](https://glaze.cs.uchicago.edu/index.html) by the University of Chicago
is a promising tool for protecting images for AI training. Hopefully this paves the way for future platforms
that are more effective.
# Technical Stuff
## This Website
It's actually just an HTML website. _However,_ the page content is
generated from Markdown. The execution is done through a lil' Python
script.
## The Comics
My comics are served via a custom template, [Sunday](/projects.html#sunday).
The source code are stored is stored in my own [Gitea](https://about.gitea.com) instance.
Images and other assets are tracked with [Git LFS](https://git-lfs.com/).
## Infrastructure
Getting technical, everything under `puercito.net` is hosted in a virtual machine over at [BinaryLane](https://binarylane.com.au).
The sites are proxied on [Traefik Proxy](https://traefik.io/traefik), served through [Docker](https://docker.com).
[BunnyCDN](https://bunny.net/) distributes the content globally with included anti-DDoS. My domains are purchased through
[Namecheap](https://namecheap.com) who provides identity privacy. Their [PrivateEmail](https://www.namecheap.com/hosting/email/)
is a cost-effective solution.
I access the infrastructure with [TwinGate](https://www.twingate.com/), a really simple VPN-like thingy.
## Code
I subscribe annually to [JetBrains](https://www.jetbrains.com/). Mostly, PyCharm is the IDE I spend my time in
since that is my preferred platform. Occasionally I find myself in WebStorm. I don't do so much actual writing
of code so much as handing my requirements to [Claude Code](https://www.claude.com/product/claude-code) for
execution.
> To be **absolutely** clear, I _only_ use Claude for technical work!
## Software
My writing is done in [Scrivener](https://www.literatureandlatte.com/scrivener/overview). My works are backed up
to a free-tier DropBox account. Google Drive is where I store everything.
The newsletter is handled through [PencilBooth](https://pencilbooth.com/), a provider specifically tiered to visual artists.
I use a self-hosted instance of [Wekan](https://wekan.fi/) for the limited task management I do.
YouTube is where I go to listen to ambient stuff while working on my projects. I am particular fan of
[Aurora Heaven](https://www.youtube.com/@aurora.heaven18). Them is some vibes.
## Hardware
My laptop is a 2024 MacBook Pro 13" with an Apple M4 processor, 24GB memory. It usually sits on my lap. When I am
at my desk, I use my Logitech [POP Keys](https://www.logitech.com/en-au/shop/p/pop-keys-wireless-mechanical) and
[POP Mouse](https://www.logitech.com/en-au/shop/p/pop-wireless-mouse) gifted to me for Valentine's Day. I have a single
external monitor (not counting the Huion). The laptop sits closed and slotted into a timber stand I hand-made. Why yes,
I am not a multi-monitor person.
For focusing, I have a pair of [Sony WH1000XM3](https://store.sony.com.au/archived-headphones-noisecancelling/WH1000XM3B.html)
Wireless Noise Cancelling Headphones (White) to block out (external) distraction. The pads wore after several years of use. So,
I installed some [replacements from Amazon](https://www.amazon.com.au/dp/B0CTR2NKJS).

View File

@@ -68,10 +68,23 @@ HTML_TEMPLATE = """<!DOCTYPE html>
color: #191919;
}}
.page-content h3 {{
font-family: 'Permanent Marker', cursive;
font-size: 1.4rem;
margin-top: 1.5rem;
margin-bottom: 0.75rem;
color: #191919;
font-weight: 700;
}}
.page-content p {{
margin-bottom: 1rem;
}}
.page-content strong {{
font-weight: 700;
}}
.page-content a {{
color: #E6507D;
text-decoration: underline;
@@ -89,6 +102,22 @@ HTML_TEMPLATE = """<!DOCTYPE html>
.page-content li {{
margin-bottom: 0.5rem;
}}
.page-content blockquote {{
margin: 1.5rem 0;
padding: 1rem 1.5rem;
border-left: 4px solid #E6507D;
background-color: rgba(230, 80, 125, 0.05);
font-style: italic;
}}
.page-content blockquote p {{
margin-bottom: 0.5rem;
}}
.page-content blockquote p:last-child {{
margin-bottom: 0;
}}
</style>
</head>
<body class="page">
@@ -102,15 +131,15 @@ HTML_TEMPLATE = """<!DOCTYPE html>
</html>
"""
# Page background colors
# Page background colors (muted primary and secondary colors)
PAGE_COLORS = {
'comics': '#ffffff',
'about': '#f5e6d3',
'projects': '#e8dfd0',
'links': '#d9e8d8',
'contact': '#e8d8d8',
'now': '#d8e3e8',
'uses': '#e8e0d8',
'about': '#f5e3d9', # muted peach
'comics': '#e3d9f5', # muted lavender
'projects': '#f5f5d9', # muted yellow
'links': '#d9f5e3', # muted teal
'contact': '#f5d9d9', # muted coral
'now': '#d9e3f5', # muted blue
'uses': '#f5dfe3', # muted peach-pink
}

118
scripts/watch.py Normal file
View File

@@ -0,0 +1,118 @@
#!/usr/bin/env python3
"""
Watch script for Puercito Fiction site.
Monitors markdown files in content/ directory and automatically rebuilds when changes are detected.
"""
import sys
import time
from pathlib import Path
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
# Add parent directory to path so we can import build script
sys.path.insert(0, str(Path(__file__).parent))
from build import convert_markdown_to_html, PAGE_COLORS
class MarkdownChangeHandler(FileSystemEventHandler):
"""Handler for markdown file changes."""
def __init__(self, content_dir: Path, site_dir: Path):
self.content_dir = content_dir
self.site_dir = site_dir
self.last_modified = {}
def on_modified(self, event):
"""Called when a file is modified."""
if event.is_directory:
return
file_path = Path(event.src_path)
# Only process .md files
if file_path.suffix != '.md':
return
# Debounce: ignore if file was modified less than 0.5 seconds ago
current_time = time.time()
if file_path in self.last_modified:
if current_time - self.last_modified[file_path] < 0.5:
return
self.last_modified[file_path] = current_time
print(f"\n📝 Change detected: {file_path.name}")
self._rebuild_file(file_path)
def on_created(self, event):
"""Called when a file is created."""
if event.is_directory:
return
file_path = Path(event.src_path)
# Only process .md files
if file_path.suffix != '.md':
return
print(f"\n✨ New file created: {file_path.name}")
self._rebuild_file(file_path)
def _rebuild_file(self, markdown_file: Path):
"""Rebuild a single markdown file."""
try:
convert_markdown_to_html(markdown_file, self.site_dir)
print(f"✅ Build successful at {time.strftime('%H:%M:%S')}")
except Exception as e:
print(f"❌ Build failed: {e}")
def main():
"""Main watch script."""
# Define directories
script_dir = Path(__file__).parent
project_dir = script_dir.parent
content_dir = project_dir / 'content'
site_dir = project_dir / 'site'
# Ensure directories exist
if not content_dir.exists():
print(f"❌ Error: {content_dir} directory not found")
return
if not site_dir.exists():
print(f"Creating {site_dir} directory...")
site_dir.mkdir(parents=True)
# Initial build
print("🏗️ Running initial build...")
print("-" * 50)
md_files = list(content_dir.glob('*.md'))
for md_file in md_files:
convert_markdown_to_html(md_file, site_dir)
print("-" * 50)
print(f"✅ Initial build complete! Built {len(md_files)} file(s)\n")
# Setup file watcher
event_handler = MarkdownChangeHandler(content_dir, site_dir)
observer = Observer()
observer.schedule(event_handler, str(content_dir), recursive=False)
observer.start()
print("👀 Watching for changes in content/ directory...")
print(" Press Ctrl+C to stop\n")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("\n\n👋 Stopping watch script...")
observer.stop()
observer.join()
print("✅ Watch script stopped")
if __name__ == '__main__':
main()

View File

@@ -41,7 +41,7 @@
'don\t do anything I wouldn\'t do',
'wow you fit the whole thing in',
'ask me about my very big hat',
'what do you call pinata with a mustache',
'what do you call a phone with a moustache',
'I would bet on the 100 chihuahuas versus that t-rex',
'sure you\'re a dog but what breed',
'it\s dark in here',