Compare commits

..

17 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
mi
ea7688016a 📝 even moar random phrases
Some checks failed
Deploy to VM / deploy (push) Has been cancelled
2025-11-20 14:06:42 +10:00
mi
2682ee7e69 📝 moar random phrases
Some checks failed
Deploy to VM / deploy (push) Has been cancelled
2025-11-20 14:00:55 +10:00
mi
b293e98184 📝 more random phrases
Some checks failed
Deploy to VM / deploy (push) Has been cancelled
2025-11-20 13:57:56 +10:00
7 changed files with 350 additions and 12 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

@@ -34,8 +34,23 @@
'too abstract for maps',
'who needs productivity when you can nap',
'arros con gris y puerco lechon por favor',
'established sometime, perhaps',
'it is a little pig'
'established since eventually, perhaps',
'this little piggie went weeeeeeeeeeeeeee',
'I know you are but what am I (you are wonderful)',
'androgynously being',
'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 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',
'are you gonna eat that',
'my aunt did the same thing once',
'did you hear the one about the silent vocalist',
'what the puppy',
'how now brown cow',
'merp merp merp'
];
document.addEventListener('DOMContentLoaded', function() {
@@ -62,7 +77,7 @@
</nav>
<main>
<p class="byline">stories from the little town</p>
<p class="byline">where comic strips come to gag</p>
</main>
<footer>