Allen
@allen.sanfordtech.xyz
Founder of @sabal.finance. Writing at sanfordtech.xyz.
"HATEOAS for Haunted Houses"
A case-study in using Hypermedia as the Engine of Application State (HATEOAS) architecture to build a flexible control system for a local haunted house on a tight delivery schedule.
www.sanfordtech.xyz/posts/hateoa...
A case-study in using Hypermedia as the Engine of Application State (HATEOAS) architecture to build a flexible control system for a local haunted house on a tight delivery schedule.
www.sanfordtech.xyz/posts/hateoa...
HATEOAS for Haunted Houses
A case-study in using Hypermedia as the Engine of Application State (HATEOAS) architecture to build a flexible control system for a local haunted house on a tight delivery schedule.
www.sanfordtech.xyz
October 14, 2025 at 4:48 PM
"HATEOAS for Haunted Houses"
A case-study in using Hypermedia as the Engine of Application State (HATEOAS) architecture to build a flexible control system for a local haunted house on a tight delivery schedule.
www.sanfordtech.xyz/posts/hateoa...
A case-study in using Hypermedia as the Engine of Application State (HATEOAS) architecture to build a flexible control system for a local haunted house on a tight delivery schedule.
www.sanfordtech.xyz/posts/hateoa...
Thanks for the link. I'll keep an eye out for updates!
October 13, 2025 at 3:50 PM
Thanks for the link. I'll keep an eye out for updates!
I'd love to try to build a personal finance app built on ATProto. Apps in that space are very sticky exactly because people value their history so much.
From what I can tell, the protocol is missing the ability to encrypt a person's data repository. That's a hard requirement.
From what I can tell, the protocol is missing the ability to encrypt a person's data repository. That's a hard requirement.
October 13, 2025 at 2:00 PM
I'd love to try to build a personal finance app built on ATProto. Apps in that space are very sticky exactly because people value their history so much.
From what I can tell, the protocol is missing the ability to encrypt a person's data repository. That's a hard requirement.
From what I can tell, the protocol is missing the ability to encrypt a person's data repository. That's a hard requirement.
Congratulations on the migration! Signed up for your newsletter.
October 4, 2025 at 1:21 PM
Congratulations on the migration! Signed up for your newsletter.
Here's a complete implementation guide with configs and screenshots:
www.sanfordtech.xyz/posts/aws-ss...
www.sanfordtech.xyz/posts/aws-ss...
The Best Way to Share AWS Credentials is Not To: Setting Up AWS SSO for Startups
Learn how to implement AWS SSO with Organizations and IAM Identity Center in under an hour, replacing shared credentials with short-lived tokens and per-environment account isolation.
www.sanfordtech.xyz
August 18, 2025 at 5:46 PM
Here's a complete implementation guide with configs and screenshots:
www.sanfordtech.xyz/posts/aws-ss...
www.sanfordtech.xyz/posts/aws-ss...
When your security setup enables faster development instead of fighting it, you can focus on shipping features rather than managing access or compromising security.
August 18, 2025 at 5:46 PM
When your security setup enables faster development instead of fighting it, you can focus on shipping features rather than managing access or compromising security.
I've used this at two companies: a fintech handling compliance audits and my own startup managing multiple contributors.
Same setup works whether you're onboarding contractors or handling compliance requirements.
No expensive SSO provider needed.
Same setup works whether you're onboarding contractors or handling compliance requirements.
No expensive SSO provider needed.
August 18, 2025 at 5:46 PM
I've used this at two companies: a fintech handling compliance audits and my own startup managing multiple contributors.
Same setup works whether you're onboarding contractors or handling compliance requirements.
No expensive SSO provider needed.
Same setup works whether you're onboarding contractors or handling compliance requirements.
No expensive SSO provider needed.
The magic happens in your local development setup. Instead of hardcoded keys, you get temporary credentials that automatically expire, generated from a single command.
August 18, 2025 at 5:46 PM
The magic happens in your local development setup. Instead of hardcoded keys, you get temporary credentials that automatically expire, generated from a single command.
AWS Organizations + IAM Identity Center solve this with two key principles: separate AWS accounts for environment isolation and temporary credentials through SSO.
Each environment gets its own account. Dev work stays in dev, prod stays locked down, billing stays consolidated.
Each environment gets its own account. Dev work stays in dev, prod stays locked down, billing stays consolidated.
August 18, 2025 at 5:46 PM
AWS Organizations + IAM Identity Center solve this with two key principles: separate AWS accounts for environment isolation and temporary credentials through SSO.
Each environment gets its own account. Dev work stays in dev, prod stays locked down, billing stays consolidated.
Each environment gets its own account. Dev work stays in dev, prod stays locked down, billing stays consolidated.
The problem with most startup AWS setups:
❌ Shared root credentials
❌ No isolation between dev/staging/prod
❌ Manual access requests slowing down work
❌ Shared root credentials
❌ No isolation between dev/staging/prod
❌ Manual access requests slowing down work
August 18, 2025 at 5:46 PM
The problem with most startup AWS setups:
❌ Shared root credentials
❌ No isolation between dev/staging/prod
❌ Manual access requests slowing down work
❌ Shared root credentials
❌ No isolation between dev/staging/prod
❌ Manual access requests slowing down work
I haven't used it myself, but I was pitched by a vendor using Coast:
www.trycoast.com
They used it to show what experiences their API could bring to my app. It's been my favorite sales call to date.
www.trycoast.com
They used it to show what experiences their API could bring to my app. It's been my favorite sales call to date.
August 5, 2025 at 12:21 PM
I haven't used it myself, but I was pitched by a vendor using Coast:
www.trycoast.com
They used it to show what experiences their API could bring to my app. It's been my favorite sales call to date.
www.trycoast.com
They used it to show what experiences their API could bring to my app. It's been my favorite sales call to date.
Not a person, but I learned a lot from this book:
www.refactoringui.com
www.refactoringui.com
Refactoring UI
Learn how to design awesome UIs by yourself using specific tactics explained from a developer's point-of-view.
www.refactoringui.com
August 2, 2025 at 4:03 AM
Not a person, but I learned a lot from this book:
www.refactoringui.com
www.refactoringui.com
Just filled out the survey! I'm looking forward to learning more about ElementInternals and Mutually exclusive <details>.
Thanks for the link!
Thanks for the link!
July 23, 2025 at 4:40 AM
Just filled out the survey! I'm looking forward to learning more about ElementInternals and Mutually exclusive <details>.
Thanks for the link!
Thanks for the link!
The meta tag support includes standard content and extensions.
The JSON-LD functionality helps your site utilize Google's enhanced search results.
Check it out! Contributions welcome.
github.com/san4d/astro-...
The JSON-LD functionality helps your site utilize Google's enhanced search results.
Check it out! Contributions welcome.
github.com/san4d/astro-...
GitHub - san4d/astro-headstart: Astro components and utilities for managing the head of a HTML document
Astro components and utilities for managing the head of a HTML document - san4d/astro-headstart
github.com
July 22, 2025 at 10:21 PM
The meta tag support includes standard content and extensions.
The JSON-LD functionality helps your site utilize Google's enhanced search results.
Check it out! Contributions welcome.
github.com/san4d/astro-...
The JSON-LD functionality helps your site utilize Google's enhanced search results.
Check it out! Contributions welcome.
github.com/san4d/astro-...
Thanks, man! I've built my startup with Astro, HTMX, Web Components, and a lightweight SQL client (DrizzleJS) and it's been amazing how quickly I can implement features.
I'd like more people to think about whether their app is truly client-side focused.
I'd like more people to think about whether their app is truly client-side focused.
July 4, 2025 at 12:32 PM
Thanks, man! I've built my startup with Astro, HTMX, Web Components, and a lightweight SQL client (DrizzleJS) and it's been amazing how quickly I can implement features.
I'd like more people to think about whether their app is truly client-side focused.
I'd like more people to think about whether their app is truly client-side focused.
Fair enough. Daisy has good theming support, which might be helpful.
Whatever tooling you choose, if ClaudeCode struggles try using the Context7 MCP server. It allows Claude to pull a library's most-recent documentation.
Whatever tooling you choose, if ClaudeCode struggles try using the Context7 MCP server. It allows Claude to pull a library's most-recent documentation.
July 1, 2025 at 8:16 PM
Fair enough. Daisy has good theming support, which might be helpful.
Whatever tooling you choose, if ClaudeCode struggles try using the Context7 MCP server. It allows Claude to pull a library's most-recent documentation.
Whatever tooling you choose, if ClaudeCode struggles try using the Context7 MCP server. It allows Claude to pull a library's most-recent documentation.
I've had a good experience with Astro and ClaudeCode. It outputs static HTML by default and works well with Tailwind. Check out DaisyUI as well, since you're using Tailwind.
July 1, 2025 at 7:34 PM
I've had a good experience with Astro and ClaudeCode. It outputs static HTML by default and works well with Tailwind. Check out DaisyUI as well, since you're using Tailwind.
Thanks for this. I'll update the post. Playing around with it a bit more, it's an `HTMLUnknownElement` if its parsed as native tag (one word, no hyphen) and a `HTMLElement` otherwise.
June 26, 2025 at 4:24 PM
Thanks for this. I'll update the post. Playing around with it a bit more, it's an `HTMLUnknownElement` if its parsed as native tag (one word, no hyphen) and a `HTMLElement` otherwise.