Invoice Studio app icon Wirlo app icon Moka app icon

Real apps,
built with AI.

I'm Victor, an iOS developer in Sydney. I design and build apps end to end, with AI as my coding partner. Two are live on the App Store, and a third is on the way.

For Australian tradies

Invoice Studio

Talk, snap or type. A tax invoice comes out.

Invoice Studio on iPhone: start from an upload or a template by trade

A circular puzzle · iPhone, iPad, iPhone Duo

Wirlo

Spin the core. Match colours. Chain combos.

Wirlo on iPhone: the wheel with a core burst and a combo

Your dog in 3D · iPhone, iPhone Duo, Apple Watch

Moka

Your real dog, in 3D. Real care levels them up.

Coming soon Read the case
Moka on iPhone: a clay 3D dog in its world, with today's missions
3
apps built this year, from idea to store listing
2
live on the App Store, a third coming soon
4
device types: iPhone, iPad, iPhone Duo, Apple Watch
2026
the year I wrote my first line of code

Case 01 · Live since 29 Aug 2026

Invoice Studio.
Paperwork, done from the ute.

Australian tradies lose hours a week to paperwork: carbon-copy invoice books, GST worked out by hand, chasing bank details.

Invoice Studio turns a voice note, a photo of a quote or a blank page into a ready-to-send tax invoice. GST is calculated automatically, and PayID details go straight onto the invoice so the client knows how to pay.

It started as a web app on 29 May 2026 and reached the App Store on 29 August: one codebase, two payment systems (Stripe on the web, StoreKit on iOS) and no front-end framework underneath. On iPhone Duo it fills the whole device in every position.

A Tax Invoice in Invoice Studio on iPhoneA Tax Invoice in Invoice Studio on iPhoneA Tax Invoice in Invoice Studio on iPhoneA Tax Invoice in Invoice Studio on iPhone

Real app screens. The businesses are examples.

iPhone Duo

The invoice,
wherever the job is.

A tradie opens the Duo on a bonnet or holds it closed in one hand. So the app has a layout for each position, and nothing important ever sits on the fold.

Invoice Studio on an open iPhone Duo held like a book
Invoice Studio on an open, upright iPhone Duo
Invoice Studio on a closed iPhone Duo, on its side
Invoice Studio on a closed, upright iPhone Duo
951 × 669 pt

Tools on one side, invoice on the other.

The fold falls exactly between them. Tap a field on the right and its editor opens on the left, so nothing covers the invoice.

669 × 951 pt

Invoice on top, tools below.

Half-fold it on the ute's bonnet and the invoice stands up while you work the bottom half.

678 × 466 pt

Wide and quick.

The invoice takes the width, with the actions in a slim floating bar.

466 × 678 pt

One hand, on site.

The phone layout, with the header and buttons kept clear of the camera.

Screens are real captures at each position's exact size, set into Apple's official device frames.

The six Invoice Studio App Store screenshots as one continuous artwork

Swipe through them: the App Store screenshots run as one continuous artwork, with the Duo's fold on the first gap.

How it's built

One web codebase with no front-end framework, inside a native iOS shell, with Apple's frameworks where the phone does the work.

JavaScript, no framework

The whole editor is plain HTML, CSS and JavaScript, shared by the web and iPhone.

Capacitor

The native iOS shell. It bridges the web app to the camera, files, share sheet and haptics.

Speech

Voice commands run on Apple's SFSpeechRecognizer, in nine languages.

StoreKit

iPhone subscriptions through RevenueCat, with Stripe on the web and one account across both.

Sign in with Apple

Apple, Google or email, with accounts and sync on Supabase.

Claude

Reads a plain-English job or an old invoice and fills in the fields, through my own Node.js server.

PDF pipeline

A server renders the same PDF from any device, and PDF.js gives a pinch-to-zoom preview inside the app.

Playwright

Scripted runs check the main flows on phone and desktop, and compare the PDF payload byte for byte before a release.

3
ways in: voice, photo, typing
4 × 8
invoice layouts × colour themes
6
starter templates by trade
A$9.99
a month, or A$79.99 a year

What I learned

It took three App Store review rounds. Every rejection was about a compliance detail, like a screen-recording permission or a link to the subscription terms, and never about the product. Since then I get the legal details right before the first submission, because they cost more time than any feature.

Case 02 · Live since 23 Oct 2026

Wirlo.
A puzzle that spins.

Pieces fall inward toward a rotating core instead of stacking in a grid. You spin the core, match colours and chain combos before it fills up.

It's built 100% native in SwiftUI and SpriteKit, with no game engine and no web wrapper. The circular loop has relatives, like Hextris. What's new is the layer on top: a live global leaderboard, share cards where no two are alike, and a signature move where you swipe up on a fully aligned ring to clear it.

It's free to play. Players can watch an optional rewarded video from Google AdMob to earn coins, buy coin packs, or take the Premium monthly subscription, which gives coins every month and removes all ads. Ads only play when the player taps to watch one, and there are never banners.

On iPhone Duo it fills the whole device in every posture: the wheel on one half, a live panel with the Piece Map and your score on the other.

The idea for the mechanic came from a dream. Everything after that was rounds and rounds of design.

Real screen recording of a match, played by the game's own test bot. Built 100% native in SwiftUI + SpriteKit.

iPhone Duo

One game.
Every way you hold it.

A foldable isn't a bigger phone. Both of its screens are close to square, the inner one has a crease, and you can turn it any way you like. So Wirlo doesn't stretch one layout to fit: it has a layout for each posture, and it fills the screen in all of them.

951 × 669 pt

The crease falls between the wheel and the panel.

The wheel gets the left half, the live panel the right. Nothing important ever sits on the fold, and tapping anywhere still spins the wheel, so you play with two thumbs.

669 × 951 pt

Wheel on top, panel below.

Half-fold it and the top half stands up like a small console, with the score and the Piece Map in your hands. The same layout works flat or in that L shape.

678 × 466 pt

The wheel takes all the height.

A narrow column keeps the score, the Piece Map and the value of your next hit, so even the small screen on its side feels designed for it.

466 × 678 pt

Compact, and clear of the sensor.

The wheel stays centred, with the next pieces in a slim strip below it. Menus and cards are placed so the sensor area never covers a button.

Real gameplay, recorded from the game running on the iPhone Duo simulator and played by its test bot.

What the extra screen is for

Piece Map

A small copy of the wheel, turning as yours turns, with the next five pieces on the lanes where they will land. The outlined one falls first, so you can plan your spin ahead.

Prism

A scoring layer on top of the combo. Close slices of three different colours and the whole wheel throws sparks for +450. You choose which colours to chase.

Next pieces, everywhere

On a regular iPhone or iPad the next four pieces sit in a slim strip. Everyone plays with the same information, so the global leaderboard stays fair across devices.

The eight Wirlo App Store screenshots as one continuous artwork: the open iPhone Duo crosses the first two, and pieces and sparks travel between the rest

Swipe through them: the App Store screenshots are one continuous artwork, and the fold of the iPhone Duo lands exactly on the gap between the first two.

How it's built

Fully native, on Apple's own frameworks. No game engine and no web view: about 12,900 lines of Swift, built with AI as my coding partner.

SpriteKit

The game itself: the wheel, the falling arcs and the particles, all drawn from code, with no image assets, on a per-frame update loop.

SwiftUI

Home, HUD, panel and every menu. The Piece Map and the mini wheel are drawn live with Canvas.

AVFoundation

AVAudioEngine synthesises every sound in real time. There isn't a single audio file in the app.

GameKit

Global leaderboard and achievements through Game Center.

StoreKit

Coin packs, remove-ads and the Premium subscription, using Apple's in-app purchases.

iCloud key-value

The coin balance follows the player across devices and reinstalls, with conflict handling.

Core Motion

The orbiting pieces on the home screen shift with the tilt of the device.

XCTest

UI tests tap every posture for real, including a full grid of the screen, while a bot plays whole matches.

DuoLayout.swift
// iOS 27.1: ask the system where the fold is.
if #available(iOS 27.1, *) {
    fold = proxy.reservedRegions(kind: .division)
        .first(where: \.isActive)?.frame
}
// Pure function: screen, insets and fold in, layout out.
static func make(size: CGSize, insets: UIEdgeInsets,
                 fold: CGRect?, isPhone: Bool) -> ArenaLayout
11
prototype rounds before native code
12,900
lines of Swift, with no game engine
4
layouts, one for each way you hold an iPhone Duo
0
audio files: every sound is synthesised

What I learned

A casual game for everyone is a different discipline from a tool for a niche. Every decision was tested against one question: would a total beginner get this in 10 seconds?

What the test bot caught

I built a bot that plays whole matches. The first Prism rule asked for one closed slice of every colour in play, and in its matches the bonus never paid, because new colours arrive faster than slices close. No screenshot would have shown that. The rule became three different colours, and it paid.

Case 03 · Coming soon to the App Store

Moka.
Your real dog, in 3D.

  • RealityKit + Metal. Native, no game engine.
  • One skin, sculpted from signed distance fields.
  • Procedural motion: the skeleton is computed every frame.
  • Looks are data: one character becomes any breed.

Real app, recorded on the iPhone Duo, iPhone and Apple Watch simulators with sample dogs. Fold positions are scripted for the recording.

One photo becomes a clay 3D dog that lives the care you really give. The food, the water and the walk you do in real life turn into missions and XP.

It's built native in SwiftUI and RealityKit, with no game engine. Around the dog there's a full care app: "can my dog eat this?" in one tap, first aid for your country that works offline, vaccines, weight, training, a shared family and a chat that knows your dog.

Coming soon to the App Store Visit moka.pet

iPhone. Real screen recording: the dog is live 3D.

Home Screen

Widgets that are alive.

Your dog sits on the Home Screen and tells you what's next. A walk runs in the Dynamic Island while the phone is in your pocket.

Apple Watch

Your dog on your wrist.

A real watchOS app. Pet the dog and the hearts float up. Tap once to log the walk, and it's on the iPhone too.

Moka: today's missions Moka: can my dog eat this? Moka: first aid for your country Moka: the family cares together Moka: build your dream dog
1
photo to make your dog in 3D
141k
lines of Swift
65
test builds before launch
602
3D props from my own Swift tool

What I learned

The 3D dog brings people in, but care is why they stay. So I set a rule: play leads to care, care beats play, and there's no play on serious screens like first aid.

Design

The details are
the product.

Before any code, I design every screen and test it against real use. Here is why the apps look the way they do.

Wirlo · Identity and game design

One rule above all.

"Nothing may require interpretation. A coin is a coin. Continue is continue."

Many Wirlo players aren't gamers. There is no text tutorial: the first match is the tutorial. Hints react to what you do, never before, and each one shows only once. The main button has to be readable in under a second, and every touch target is at least 44 points.

The crease is a design constraint

On a foldable, a line runs through the middle of the screen. Instead of hoping nothing lands on it, the layout is built around it: the system reports where the fold is, and the wheel and the panel each take one side. Pause and game-over cards open in the panel half, so the wheel stays in view.

A mark that looks drawn, not typed

The "W" isn't a letter from a font. It's four coloured strokes with round caps, tilted 10°, and the last one sits higher. The gaps stand for the piece that hasn't snapped in yet.

Wirlo wordmark

Colour tuned for long sessions

The brand colours are vivid. In the game they're desaturated by 12% so they don't glow against the dark background after twenty minutes of play.

Brand
In game

One typeface, no exceptions

Quicksand replaced Poppins and the system font. Four weights cover all 10 languages with no fallback font.

Aa 1234
Display 58 · Title 18 · Button 15 · Body 14 · Caption 11

Sound, motion, touch

There isn't a single audio file. Every sound is synthesised live on one pentatonic scale, so it all sounds like one instrument, and the hit sound rises as your combo grows. There's one gentle haptic tap per meaningful event and nothing on every frame. Animation follows the iPhone's own Reduce Motion setting.

11 rounds of prototype

The game was designed as an HTML prototype first. The approved prototype became the contract for the native build.

  • Rounds 3–5: readable surfaces, then a three-band layout
  • Rounds 5–8: a frosted-glass bar with real content moving behind it
  • Round 8: core sized to about 21% of the screen, calibrated by feel
  • Round 9: symmetric lanes
  • Rounds 10–11: no impossible situations, and every message moved to the top, because your eyes stay on the core

What I cut

Good design is also what you remove.

  • Large animated logo on launch: it looked like letters appearing out of nowhere
  • Vignette: it crowded the score; film grain does the job
  • "?" help button: if a screen needs help, the screen is wrong
  • Share card replaying the match: now it's generated art, so no two are alike

Invoice Studio · Brand and invoice design

A quiet tool, a beautiful invoice.

The app stays neutral. The invoice carries the brand.

The interface uses calm greys and a single teal accent, so the tradie's own invoice is the colourful thing on screen. Colour themes apply only to the invoice and its PDF, never to the app around it.

App interface
Neutral greys, one teal accent
Invoice themes
8 colours, the client's choice

Four layouts, four personalities

Each layout fits a different kind of business, from a formal accountant to a bold, modern trade.

Modernsoft, rounded
Classicsharp, formal
Minimaljust the facts
Boldcolour first

Three typefaces, three jobs

A clean sans for the interface, an italic serif so a company name feels like a signature, and a monospace font so every dollar lines up.

Plus Jakarta Sans
Harbour Plumbing Co.
$1,240.00

The brand outside the app

Every Instagram post comes from one fixed template: the same grid, colours and type in every post. A bold headline with its second line in teal, an italic serif subtitle, and white cards on a soft grid. The Reels follow the same rules, with no emoji. Consistency is what makes a small brand recognisable.

About

From zero to the App Store
in one year.

Victor, founder of ViktaI wrote my first line of code in February 2026. I have no CS degree and didn't do a bootcamp. I learned with AI as a coding partner, over nights and weekends after a full-time day job.

Since then I've shipped Invoice Studio and Wirlo end to end, and Moka is on the way. I'm not a "no-code" story: these are real native apps, I make every product and design call, and when something breaks at 11pm I'm the one sorting it out. Vikta is what I'm building while I learn, in public, one shipped product at a time.

Let's work
together.

Got an app idea, a role on your team, or an interest in backing what I'm building? Tell me about it. I read every message myself.

hi@vikta.dev · LinkedIn