Freelance developer

Small software,
done properly.

I build simple websites, Windows tools and Android apps, and I help you get your database working the way it should.

What I can do for you

Four things, done well. If your idea fits in one of these, let's talk.

Simple webpages

Landing pages, personal sites and small business pages. Fast, mobile-friendly and easy for you to keep up to date.

  • One-page or multi-page sites
  • Contact forms & maps
  • Help with hosting and domains

Windows apps

Small desktop tools and utilities that save you time, like data entry forms, planners, file helpers and report generators.

  • Built with .NET for Windows 10/11
  • Simple installer included
  • Local or database-backed

Phone apps

Simple Android apps that do one job well, either on their own or as a companion to a desktop app or website.

  • Android (APK or Play Store)
  • Sync with an existing system
  • Clean, easy-to-use screens

Database help

Slow queries, messy tables or just not sure where to start? I give practical, no-jargon advice to get things running smoothly.

  • Table design reviews
  • Query speed-ups
  • Backups & best practices

Database tips

Short, practical advice you can use today. Click a tip to read it.

01Index the columns you search by

If you often filter with WHERE email = ... or join on customer_id, those columns should have an index. Without one, the database reads every row. Don't index everything, though: each index slows down inserts and updates a little.

CREATE INDEX ix_orders_customer_id
  ON orders (customer_id);
02Never build SQL by gluing strings together

Concatenating user input into a query opens the door to SQL injection. Always use parameters. It's safer, and the database can reuse the query plan.

// Bad
"SELECT * FROM users WHERE name = '" + name + "'"

// Good
"SELECT * FROM users WHERE name = @name"
03Select only the columns you need

SELECT * is handy while exploring, but in real code it pulls more data than needed, breaks when columns change, and can stop the database from using a covering index. List the columns explicitly.

04A backup you haven't restored isn't a backup

Schedule automatic backups, store a copy somewhere other than the same machine, and restore one to a test database every now and then. That's the only way to know it actually works.

05Store dates as dates, and money as decimals

Use proper DATE/DATETIME types instead of text, so sorting and date math just work. For money, use DECIMAL(19,4), never FLOAT, which can't represent amounts like 0.10 exactly.

06Use transactions for changes that belong together

Moving stock, transferring money, saving an order with its lines: if one step fails, none should apply. Wrap them in a transaction so the data never ends up half-updated.

BEGIN TRANSACTION;
  UPDATE stock SET qty = qty - 1 WHERE id = 7;
  INSERT INTO order_lines (...) VALUES (...);
COMMIT;
07Let the database protect your data

Primary keys, foreign keys, NOT NULL, UNIQUE and CHECK constraints catch bad data even when the app has a bug. They're free validation you only write once.

About me

Hi, I'm TechBro. I build small, useful software for people and small businesses who need something that just works, without a big agency price tag.

I work across the whole stack: the webpage or app you see, and the database behind it. That means one person to talk to from idea to launch.

How I work

  1. Talk. You tell me what you need; I ask questions until it's clear.
  2. Plan. A short written plan with scope, price and timeline. No surprises.
  3. Build. Regular updates so you see progress early and often.
  4. Hand over. You get everything, plus help getting it live.

Get in touch

Have an idea or a question? Send me a message and I'll get back to you, usually within a day.