MoreRSS

site iconThe Practical DeveloperModify

A constructive and inclusive social network for software developers.
Please copy the RSS to your reader, or quickly subscribe to:

Inoreader Feedly Follow Feedbin Local Reader

Rss preview of Blog of The Practical Developer

I'm 17 and built my first SaaS. Here's the tech stack and what I'd do differently.

2026-01-20 21:21:15

The "I wish I knew this before I started" thread

3 months ago I started building Animiso - a tool to help freelancers stop the "any update?" text chaos.

Today (Day 3 of launch): 0 users, $0 revenue, infinite lessons learned.

Here's what I built, how I built it, and what I'd change.

The Problem

As a freelance, clients would ask "any update?" via:

  • Text at 9 PM
  • Email at 6 AM
  • Slack during lunch
  • Calls that should've been a screenshot

I'd spend 2+ hours/week just on status updates.

The Solution

Animiso: A shareable project timeline.

  1. Freelancer creates project → gets unique link
  2. Posts updates (screenshot + note) in 30 seconds
  3. Shares link with client (no login for them)
  4. Client checks whenever they want

Simple. Boring. Solves a real problem.

What Took the Longest

Not the code. The uncertainty.

"Is this even useful?"
"Will people pay for this?"
"Am I wasting my time?"

I spent more time doubting than coding.

What I Learned

1. Ship before you're ready

I wanted to add:

  • Email notifications
  • File uploads
  • Comments
  • Custom branding

But I shipped without them.

Good decision. I can add features when users ask for them.

2. Building ≠ Success

I thought: "Build it and they will come."

Reality: Building is 10%. Distribution is 90%.

I have a working product and 0 users.

The hard part isn't done. It's just starting.

3. Talk to users BEFORE building

I built what I thought freelancers needed.

Should have:

  • Asked 50 freelancers first
  • Validated the problem
  • Pre-sold it

Live and learn.

Current Status

  • Users: 0
  • Revenue: $0
  • Runway: Infinite (I'm 17, live with parents, no costs)
  • Plan: Send 100 DMs/day until I get 10 users

What I'd Do Differently

  1. Validate first
    Talk to 50 potential users before writing code

  2. Build an audience first
    Post daily for 3 months WHILE building

  3. Start with a waiting list
    Collect emails before launch

  4. Make a demo video
    Show don't tell

  5. Be more aggressive
    10 DMs/day is nothing. Should be 100/day.

Want to Try It?

animiso.fun

Code LAUNCH50 = $1.50/month forever

I'm desperate for feedback from real developers who freelance.

Tell me what sucks. I'll fix it.

Questions for Devs Who've Launched

  1. How did you get your first 10 users?
  2. How long until you hit $100 MRR?
  3. What marketing channel worked best?
  4. What would you tell your past self?

Drop your answers below. I'm reading everything.

Also: If you're a dev who's thought about building a SaaS but hasn't started - do it. You'll learn more in 3 months than 3 years of tutorials.

(Even if you end up with 0 users like me 😅)

Make Your Technical Tutorials Interactive with SQLize Embed

2026-01-20 21:19:48

If you've ever written a SQL tutorial or database documentation, you know the struggle. You provide a beautiful code snippet, but for your readers to actually see it in action, they have to:

  1. Copy the code.
  2. Open their local terminal or a heavy IDE.
  3. Set up a database schema.
  4. Run the code.

Most readers won't do it. They just keep scrolling.

Today, I'm excited to introduce SQLize Embed—a lightweight, responsive, and powerful way to embed live SQL sandboxes directly into your blog, documentation, or educational site.

What is SQLize Embed?

SQLize Embed is a client-side library that transforms static <div> elements into fully functional SQL editors. Powered by the SQLize.online engine, it allows users to write and execute SQL against real database instances without leaving your page.

Key Features

  • 20+ Database Engines: Supports everything from the classics like MySQL 8.0/9.3, PostgreSQL (14-18), and SQLite 3, to enterprise giants like MS SQL Server (2017-2025) and Oracle 23ai.
  • Ready-to-Use Datasets: Want to demo a JOIN? Use preloaded databases like Sakila (MySQL/MariaDB), OpenFlights, or AdventureWorks (MS SQL).
  • Modern Editor Experience: Powered by the Ace Editor, providing syntax highlighting, auto-indentation, and a professional coding feel.
  • Responsive & Lightweight: Works seamlessly on mobile and desktop.
  • Read-Only Mode: Perfect for strictly showing examples that you want users to run but not modify.

Getting Started in 30 Seconds

Adding a live SQL sandbox to your site is as easy as adding a YouTube video.

1. Include the Script

Add this script tag to your site's <head> or before the closing </body> tag:

<script src="https://sqlize.online/js/sqlize-embed.js"></script>

2. Add Your Sandbox

Create a div with the data-sqlize-editor attribute. Specify your preferred database version and initial code:

<div data-sqlize-editor data-sql-version="mysql80" code-rows="10">
-- Create a sample table
CREATE TABLE dev_to_fans (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(100)
);

-- Insert data
INSERT INTO dev_to_fans (username) VALUES ('awesome_dev'), ('sql_ninja');

-- Run it!
SELECT * FROM dev_to_fans;
</div>

Advanced Configuration

You can customize the appearance and behavior of the sandbox using simple HTML attributes:

Attribute Description Default
data-sql-version The DB engine (e.g., psql17, mssql2025, clickhouse) mysql80
code-rows The height of the editor in lines 12
result-rows The height of the result area 12
data-read-only Set to true to disable editing false

Use Cases

  • Interactive Learning: Build a "SQL 101" course where users solve challenges directly in the browser.
  • Documentation: Stop using screenshots of tables. Let users run DESCRIBE table themselves.
  • Technical Blogs: Show off complex PostgreSQL window functions or the new MariaDB Vector types with live examples.

Try the Live Demo

Check out the live documentation and various examples here:
👉 SQLize Embed Documentation

👉 SQLize Embed Showcase

Join the Community!

We are constantly adding support for new database versions (we already have MS SQL Server 2025!). If you have a specific database or dataset you'd like to see, let us know in the comments!

Happy coding! 💻

sql #database #webdev #tutorial #productivity #programming

Terraform S3 Native State Locking - Ditch DynamoDB Forever

2026-01-20 21:17:52


No more DynamoDB tables for Terraform locking! Terraform 1.9+ introduced S3 native state locking - a built-in mechanism that eliminates the extra AWS resource while keeping your team deployments safe. Here's everything you need to know.

The Problem with DynamoDB Locking


Traditional S3 backend required two AWS resources:

terraform {
  backend "s3" {
    bucket         = "my-state-bucket"
    key            = "prod/terraform.tfstate"
    region         = "us-east-1"
    dynamodb_table = "terraform-locks"  # Extra cost + management ❌
    encrypt        = true
  }
}

Issues:

  • DynamoDB table = always-on cost (~$0.25/month minimum)
  • Extra IAM permissions to manage
  • One more resource to create/delete
  • Lock table drift (table deleted but state remains) ### Enter S3 Native State Locking Terraform 1.9+ (January 2026): use_lockfile = true makes S3 handle locking natively.
terraform {
  backend "s3" {
    bucket       = "my-state-bucket"
    key          = "prod/terraform.tfstate"
    region       = "us-east-1"
    encrypt      = true
    use_lockfile = true  # S3 does it all! ✅
  }
}

How it works:

  1. Terraform creates terraform.tfstate.tflock alongside your state file
  2. S3 manages lock acquisition/release atomically
  3. Optional: Keep DynamoDB for double-locking redundancy
  4. S3 bucket policy needs PutObject for *.tflock files ### Migration: 2 Minutes Flat #### Step 1: Verify compatibility
terraform version  # Must be 1.9.0+

Step 2: Update your backend

# Remove dynamodb_table, add use_lockfile = true

Step 3: Re-init

terraform init -migrate-state

Step 4: Clean up

aws dynamodb delete-table --table-name terraform-locks

Done. Zero downtime, same locking guarantees.

Real-World Test


Scenario: Two terminals, same state file, rapid apply commands.

Before (DynamoDB):

Terminal 1: Acquiring lock via DynamoDB...
Terminal 2: [WAIT] Lock held by Terminal 1

After (S3 Native):

Terminal 1: Acquiring S3 lock...
Terminal 2: [WAIT] Lock held by Terminal 1 (via .tflock)

Identical behavior, one less AWS bill line item.

Gotchas & Requirements

Item Requirement
Terraform 1.9.0+
S3 Permissions PutObject on *.tflock files
Bucket Policy Allow lock file creation
Existing State terraform init -migrate-state

Bucket policy update:

{
  "Effect": "Allow",
  "Action": ["s3:PutObject"],
  "Resource": "arn:aws:s3:::my-state-bucket/prod/*.tflock"
}

Why This Changes Everything

❌ OLD: S3 state + DynamoDB lock = 2 resources
✅ NEW: S3 state + S3 lock = 1 resource
💰 SAVINGS: ~$3/year per state file
🔧 SIMPLICITY: One less failure point

Production teams: Delete 100+ DynamoDB lock tables across your org.
Solo devs: Zero extra resources for remote state.
CI/CD: Simpler IAM roles.

My Updated Workflow (2026)

# Every project now gets this backend
terraform {
  backend "s3" {
    bucket       = "my-org-terraform-state"
    key          = "env/${terraform.workspace}/terraform.tfstate"
    region       = "us-east-1"
    encrypt      = true
    use_lockfile = true
  }
}

Daily habit:

# Verify locks work
terraform plan  # Should show "Acquiring state lock..."

Try It Now

  1. Create S3 bucket: aws s3 mb s3://my-terraform-state-2026
  2. Update your EC2 .tf with above backend
  3. terraform init
  4. Push your local state: terraform init -migrate-state

Result: Locked, remote, DynamoDB-free Terraform in 5 minutes.

S3 native locking makes Terraform state management finally "set it and forget it." No more lock table drift, no more surprise charges, no more complexity.

Already migrated? What was your experience? Still using DynamoDB? Why? 👇

Hands-On Practice: Amazon Personalize

2026-01-20 21:15:03

Amazon Personalize

Brief Overview

Amazon Personalize enables businesses to deliver relevant, real-time recommendations without ML expertise. It supports diverse use cases from product suggestions to content discovery, driving revenue growth and customer satisfaction across e-commerce, media, travel, finance, education, and gaming industries.

Key Industries & Applications

E-Commerce

  • Product recommendations
  • Personalized homepage content
  • Cart add-on suggestions
  • Search result re-ranking

Media & Entertainment

  • Video/movie recommendations
  • Personalized music playlists
  • Content discovery
  • "Continue watching" suggestions

News & Publishing

  • Personalized article feeds
  • Related story suggestions
  • Custom newsletter content

Travel & Hospitality

  • Destination recommendations
  • Hotel and flight suggestions
  • Personalized activity packages

Retail & Fashion

  • Style and outfit recommendations
  • "Complete the look" suggestions
  • Reorder reminders

Financial Services

  • Product recommendations (cards, loans)
  • Personalized investment suggestions
  • Targeted offers

Education

  • Course recommendations
  • Personalized learning paths
  • Skill-based content matching

Gaming

  • Game recommendations
  • In-game item suggestions
  • Player matching

Available Recipes

Recipe Purpose
USER_PERSONALIZATION Personalization per user. Items by purchases, views. Recommended for you. Popularity count. Most popular.
USER_SEGMENTATION Item and attribute affinity.
PERSONALIZED_ACTIONS Best action.
PERSONALIZED_RANKING Re-rank search results for user.
RELATED_ITEMS Customers who viewed x also-viewed. Frequently bought together. Similar items.
TRENDING_NOW Currently trending content.

Common Event Types

Industry Events
E-commerce view, click, add_to_cart, purchase
Streaming play, pause, complete, like
News read, share, bookmark
Travel search, book, favorite

Business Benefits

  • 10-30% increase in conversions
  • Higher engagement and click-through rates
  • Improved retention and reduced churn
  • Automated personalization at scale

Hands-On Practice

This guide will walk you through building a recommendation system by AWS CDK in Python with 02 stacks:

  • Build the infra such as dataset created in S3, configuring Dataset Group, Schema and Recipes (Part I).
  • Create the Pipeline stack to orchestra the automatic workflow (Part II).
  • Upload dataset, execute the State machine to create the solution (model training) and campaign (Part III).

Beyond Just Code: Crafting a Portfolio That Stands Out in 2026

2026-01-20 21:13:51

This is a submission for the New Year, New You Portfolio Challenge Presented by Google AI

About Me

Hi, I'm Peluola David Adeoluwa (PDA), a Frontend Architect and Web3 Creative Strategist based in West Africa, Nigeria. I'm Currently a Software Engineering student at Miva Open University. I am deeply passionate about the intersection of creative design and emerging technologies, particularly Web3 and AI.
My journey began with Python automation and evolved into crafting high-fidelity digital experiences. I don't just write code; I orchestrate visual narratives. With this portfolio, I wanted to break away from the standard "grid of thumbnails" and create something that feels like a digital scrapbook—tactile, fluid, and deeply personal. I aim to express the intersection where technical precision meets artistic soul, using motion and typography to tell a story rather than just list skills.

Portfolio

How I Built It

This portfolio was built with a "Design-First" mindset, leveraging React 19, Tailwind CSS, and Framer Motion for the heavy lifting on animations.

The Design System

  • I utilized a specific aesthetic I call "Glassmorphism 2.0"—combining deep midnight backgrounds (#050505) with high-blur glass cards (backdrop-blur-xl), grainy noise textures for depth, and sophisticated typography using Instrument Serif for headlines and Inter for body text.
  • Google AI Integration: I used Google Gemini as my "Elite Creative Architect" pair programmer. Instead of asking for basic code snippets, I fed Gemini a strict design system (The 8px Rule, specific color hexes like "Singularity Blue", and motion guidelines).
  • Gemini helped architect the complex framer-motion variants for the parallax effects in the Hero section.
  • It generated the logic for the "Vault" archive modal, ensuring the state management between the main view and the overlay was seamless.
  • It helped refine the responsive layouts.

What I'm Most Proud Of

  1. The "Vibe" & Micro-interactions: I'm particularly proud of the custom cursor physics and the floating "Available Now" badge that reacts to the environment. It makes the site feel alive.

  2. The Hero Section: The parallax effect on the "P D A" background letters against the foreground profile card creates a sense of depth that draws the user in immediately.

  3. The Vault (Archive): Instead of cluttering the main page, I built a modal overlay that acts as a "Vault" for older projects. It keeps the main experience clean while still preserving my history (like the transition from Inboxx to my newer work with BCCS Hub).

  4. Attention to Detail: From the custom SEO meta tags to the specific positioning of the navigation buttons.

Thank you!

Got 120+ stars in just two weeks since my project was released.

2026-01-20 21:13:45


I recently open sourced Senlo and the response honestly surprised me. Hitting more than 120 GitHub stars in such a short time was a strong signal that the problem space resonates with others. It is motivating to see developers follow the project, open issues, and share thoughtful feedback, especially at an early stage.

Right now I am actively working on the next big step which is integrating AI directly into the email editor. The goal is to make everyday work with email content faster and more intuitive while keeping full control in the hands of the user. Still early days, but the momentum so far gives me a lot of energy to keep pushing forward.

Link to try and support me with ⭐️ - https://senlo.io/