PureMoney — In Progress · 2024A receipt-based budgeting app with OCR scanning and AI-powered expense categorization, built for how people actually manage money, not how textbooks say they should.End-to-end solo design · receipt OCR + AI-powered budgetingThe problemTools that start well and get quietly abandonedMost budgeting apps fail not because users lack discipline, but because they make discipline harder than it needs to be. Logging transactions manually is tedious enough that most people eventually stop. Fixed frameworks like 50/30/20 don't fit real financial lives, with people having loans, variable income, and savings habits that don't match any model. The result: tools that start well and get quietly abandoned, leaving people feeling like they failed the system rather than like the system failed them.ResearchSeventeen people. All tracking. Nobody happy about it.A survey of seventeen people in Craiova, Romania in January 2024. Small sample, local, treated as directional, not conclusive. Most tracked expenses in Excel or not at all. A smaller group used apps like Wallet, Money Manager, or their banking app's built-in tracker. Nobody described their current method as ideal.Most tracked spending in Excel; some used apps; nobody was satisfiedAlmost nobody followed 50/30/20, with loans, irregular income, and savings that didn't fit the modelConsistent priorities: automatic categorization, budget alerts, simple interface"I'd be curious the first month but might forget after." That came up in different forms across multiple responses. Not skepticism about the utility of tracking. Skepticism about sustaining the behavior. This shifted the design focus toward reducing the effort cost of each individual interaction, so the habit requires less willpower to maintain.Key featuresGetting StartedIn MVP, onboarding skips account creation entirely. The app opens to a splash screen, then requests iCloud access, syncing financial data through a system the user already trusts, before asking for anything in return.Category Addition FlowAdding a category takes under 30 seconds. A bottom sheet slides up from the home screen, prompting for a name, an icon, and a color, three focused steps, each with a clear default. The result appears immediately in the dashboard, confirming the action without any navigation.Edit Category FlowEditing a category is as lightweight as creating one. From the home screen, a tap opens the category details, and items are listed with their amounts, each one editable in a single focused screen. Changes reflect immediately, and a swipe or a delete button removes any item.Category ManagementNeeds, Wants, and Savings ship pre-filled as starting points, not rules. A user can dismantle the defaults in under a minute. Full add, edit, and reorder flows are available so the system reflects how each person actually thinks about their spending.Register Receipt FlowThe core MVP flow: scan a receipt, confirm what was extracted, assign items to categories. A tap on the register button triggers the camera action sheet. The pipeline processes the receipt and presents a structured grocery list, and each item is reviewable, distributable across categories, and confirmable in a single pass before being committed.Design decisionsCategory System: Categories are fully user-defined, each getting a name, icon, color, and optional budget limit. Needs, Wants, and Savings ship pre-filled as a starting point, not a rule. A user can dismantle the defaults in under a minute. The tradeoff is real: default structures anchor behavior, and whether that anchoring is neutral or quietly coercive is something only usability testing will reveal.The pipeline works in four stages: a photo triggers a Core ML model that identifies the retailer; store-specific regex extracts individual line items; and a categorization layer applies AI inference based on the user's prior behavior. For new items, an AI model handles initial categorization, and the user can review and correct everything before saving. The regex approach came out of close collaboration with the developer: store-specific patterns proved more reliable than general-purpose OCR for the structured receipt formats used by Romanian supermarkets. Anything outside the covered chains fails clearly, not silently.The review step between scanning and saving is intentional. Showing what was extracted, and letting the user correct it before it's committed, keeps the system legible and builds trust over time.The home screen answers one question: how am I doing right now? Current month spending against budget, recent transactions, and a category breakdown, all without requiring navigation. This is a design assumption based on survey preferences, not observed behavior. Whether the information hierarchy matches what users actually look for first is still untested.No Account Required: The MVP skips account creation entirely. Instead of asking users to commit before they've seen anything, the app syncs financial data through iCloud, a system already on their device and already trusted. The path is: splash screen, iCloud permission, home screen. No email, no password, no barrier. This directly addresses the habit-formation concern the research surfaced: there is no sign-up to abandon, and no onboarding friction to resent.Failed extractions, unrecognized store formats, and low-confidence categorizations each have explicit error states, with language that explains what happened and a clear path to manual correction. Users who get burned by an incorrect automatic categorization they didn't notice are less likely to trust the feature long-term.OutcomeThe core flows are implemented. The receipt pipeline works for the supermarket chains it covers; anything outside that set fails gracefully. What hasn't happened yet is watching real users move through it, which is the only validation that would meaningfully change confidence in these design decisions.ReflectionNo usability testing has been conducted. The home screen hierarchy, category creation flow, and receipt review interface are all research-informed assumptions. Whether the friction-reduction decisions are enough to sustain the habit long-term is something only longitudinal use can answer. The research foundation is real. The next step is putting the product in front of people.LearningsDesign can't validate itself The gap between how a product is intended to work and how it actually behaves in someone's hands only closes when real users are in the room.Habit loops need observation Whether a behavior becomes routine or quietly gets abandoned can't be predicted from the design. It has to be measured. That measurement hasn't happened yet.The technical problem is the solved part Receipt parsing works. The harder question is whether people keep using it. Knowing which problem you're still working on is the most useful thing to carry into the next phase.
LionPrint — Launched · 2025A web presence built from zero for a print company with no portfolio, no copy, and no digital footprint. Designed, built, and written solo, two hours a day, on a free tool stack.Launched live · 3 follow-on projects from same client · est. 10–20 leads/dayThe problemBuilding credibility from absolute zeroLionPrint was a brand-new business. Not a relaunch, not a rebrand. A company that had never traded, with no portfolio photography, no copy, and no digital footprint of any kind. Their entire online presence was social media. The challenge wasn't designing a website; it was constructing a first impression for a company that was still building its own track record, with no proof of work to anchor it.ResearchFinding the gapResearch was competitive and observational: a sweep of local print businesses in Craiova to understand what the category looked like and where LionPrint could stand apart.Local market: most print sites were visually dated or template-heavy with no clear personalityNo competitor had a coherent brand identity, just content on default layoutsGap: something that felt modern and intentional, even on a tight budgetKey featuresFirst ImpressionThe homepage had to do the work that a portfolio couldn't. LionPrint had real clients but no digital footprint. The client wanted a promotional video embedded above the fold so visitors could see the work in motion before scrolling. Every structural choice, including that video placement, was made to project credibility from page one, with typography chosen before anything else to set the tone of every decision that followed.Service CatalogIndividual pages per service, not a collapsed list. This was partly an SEO decision and partly a long-term bet: each page was designed to receive real photography of completed work over time, making the site progressively more convincing as the portfolio grew.Why Choose Us & Social ProofThe trust section leads with concrete differentiators rather than generic claims. Clients needed a reason to pick a brand-new business over established local competitors, so this section was designed to anchor credibility before the visitor reached the service pages.Portfolio GalleryA lightweight grid structured so each entry can expand into a detail view without requiring a separate page. Built to handle real photography at any scale without a layout rebuild.FAQ & ContactThe FAQ section surfaces the questions that were already landing in the client's WhatsApp inbox, reducing friction before first contact. The contact form sits below it, offering an alternative channel for visitors who prefer not to call or message directly.Advertising BannersThe banners page was built to handle the full range of formats LionPrint offered, from small rollups to large outdoor installations. Showing the variety of scale in a single page communicates capability without requiring a portfolio the client didn't yet have.Design decisionsLionPrint's customer base splits in two directions: individuals ordering business cards or invitations, and corporate clients placing bulk production runs. The visual language had to work for both without pitching too high for one or too casual for the other. The brand identity, logo and color palette, was already in place when the website project began, influenced by the eMAG visual identity. My role was consistent application across every touchpoint: cards, CTAs, headers, the hero, and mobile contrast. Typography followed the same logic. Oswald in headings reads as serious and compressed without feeling corporate. Open Sans in the body handles legibility quietly. Together they signal a business that takes itself seriously without pricing out the small client.Navigation Architecture: Each service was given its own dedicated page rather than being listed together on a single page. There were two reasons: it improves SEO by giving each service a distinct URL and indexable content, and it allows each page to grow more specific and credible as the business builds its real portfolio over time. The structure was the right call for the long term.Contact Strategy: WhatsApp as the primary contact channel was the client's decision and the right one, reflecting how his customer base actually operates. Where we disagreed was on volume. The page shipped with a phone number button, a floating WhatsApp button, and a contact form alongside the main CTA, which already linked directly to WhatsApp. I pushed back: the redundancy added visual noise without adding a new contact path. He disagreed. I accepted the tradeoff. If I were doing this again, I would have made the case with evidence, a concrete example of restraint outperforming clutter rather than design principle alone.The button already went to WhatsApp. Adding a second WhatsApp entry point didn't create a new contact path. It just made the page noisier.Working within Elementor Free on shared hosting imposed a useful discipline. No premium widgets meant no temptation to over-engineer interactions, and the plugin stack was kept minimal by necessity. Performance on budget hosting degrades fast when you start stacking dependencies. The constraint shaped better decisions. The decision to skip a mobile hamburger menu follows the same logic. The site's structure, a homepage that surfaces the full service catalog, means there's no navigation depth to hide. People scroll on mobile; the layout works with that, not against it.Content Compromise: The AI-generated placeholder images were the project's most visible trade-off. The client wanted service pages live before real photography was available, understandable commercially, but visually costly. A service business selling visual output is undermined more than most by imagery that isn't real. I suggested keeping those pages unpublished until content was ready. He disagreed. This is the detail I'd go back and fight harder on.OutcomeThe client's reaction at launch was strong enough that he commissioned three more websites from me immediately after, not referrals from his network, but follow-on work from the same client. That is the clearest signal of success: the work earned repeat business before any analytics were in place. During the active working period, the site appeared to be generating an estimated 10–20 leads per day, though paid social campaigns were running simultaneously, making attribution difficult. The numbers were encouraging; what they proved, exactly, remains genuinely uncertain. The more meaningful outcome was what the project proved about working under real constraints. I took a client from zero to a live, professional website covering strategy, design, implementation, and copy, two hours a day, on a free tool stack, with no prior Elementor experience.ReflectionIf I were redesigning LionPrint today, I would wait until real portfolio content is available before touching the layout. The site's biggest credibility gap isn't the design, it's the absence of proof. The bones are solid; what it needs most is evidence. I would also bring Figma into the process from the start. Even a rough wireframe phase would have reduced rework and made client conversations cleaner. On the contact section: next time, the evidence comes first. This was my first real client web project. It taught me how to navigate a client who is engaged but unpredictable, how to make good decisions under real constraints, and how to ship something you're genuinely proud of even when the conditions aren't ideal.LearningsDesign for real content from the start Placeholder states that look polished are silently misleading, to the client and to yourself. Either wait for real content or make placeholders obviously temporary, not quietly permanent.Wireframes before build prevent structural disagreements Even rough Figma wireframes shared early create a feedback loop that catches layout and hierarchy problems before they're built into production. Starting directly in the builder skips that loop.Compliance isn't collaboration A designer who accepts a client brief without presenting a structured counter-argument isn't adding professional value. The evidence, not the client's preference, should come first.Constraints shape better decisions Working on Elementor Free with a minimal plugin stack forced discipline. No premium widgets meant no temptation to over-engineer. Budget constraints, handled well, produce leaner, faster, more maintainable work.
Autentic Marketing — Launched · 2026A full-stack agency website built in two weeks with no prototype phase, navigating fixed constraints, client preferences, and the challenge of designing for a business still taking shape.Live in 2 weeks · client's 4th return engagement · full-scope soloThe problemBuilding credibility before the team existedAutentic Marketing needed a web presence that could hold its own against established agencies, while the agency itself was still forming. The honest tension in the brief: how do you design for authenticity when there's not yet much to show? That constraint shaped every structural decision on the page.ResearchCompressed timeline, structured approachWorking within a two-week fixed deadline and a fourth engagement with the same client, discovery was compressed, but not skipped. I researched what a high-performing marketing agency site needs to do: business goals, target audience clarity, value proposition, IA, service framing, trust signals, CTAs, and competitor positioning. The client also came in with an AI-generated sitemap as a structural starting point, which gave the project a defined skeleton from day one and let the two weeks focus on execution rather than negotiation.4th engagement: brand context, tone, and preferences already mappedResearched agency site best practices across 10 dimensions (goals, IA, CTAs, trust signals, competitor framing)Client-provided AI sitemap used as structural foundationKey featuresOne Scrollable StoryThe counterproposal to separate pages was a single scrollable experience, each section building on the last, the full picture arriving by the time the user reached the CTA. A standalone About page for a team that couldn't yet show faces or bios would have been an empty room with a sign on the door.Service OfferingService sections were designed for progressive discovery, with value established before the ask is made. The animated gradient on service cards runs at 14 seconds, slow enough to add life without tipping into distraction. Built as custom HTML and CSS embedded via Claude Code.Mobile & ContactMobile-first wasn't a checkbox, it was the actual design sequence. The WhatsApp CTA is large, thumb-friendly, and persistent. On an audience primarily reaching the site through a phone, that button isn't a contact option. It's structurally the whole point of the page.Design decisionsNo Prototype Phase: The most unconventional choice was also the most pragmatic: no Figma prototype. Design happened directly in the browser, with WordPress and Elementor as the canvas, ChatGPT for copy drafts and UX logic, and Claude Code for anything requiring real front-end work. The gap between a design decision and its execution was measured in minutes, not days. On a two-week fixed timeline, that compression wasn't a shortcut. It was the only workflow that made sense.The sharpest structural debate was about page architecture. The client arrived with an AI-generated sitemap as their starting point: a useful skeleton, but one that proposed separate standalone pages for About and Services. A standalone About page for a team that couldn't yet show faces or bios would have been an empty room with a sign on the door. The counterproposal, informed by what the research showed about how credible agencies sequence information, was a single scrollable experience that earned attention progressively, each section building on the last, the full picture arriving by the time the user reached the CTA.Sometimes the right design decision is the one you don't make.Mobile-first wasn't a checkbox, it was the actual design sequence. Every section was tested on a mobile viewport before the desktop layout was considered done. The WhatsApp CTA is large, deliberately thumb-friendly, and persistent. On an audience primarily reaching the site through a phone, that button isn't just a contact option. It's structurally the whole point of the page. Everything above it exists to earn the tap.Custom Animation: The animated gradient on the service cards, a slow 14-second color-flow, adds life without tipping into distraction. It's disabled on mobile and respects prefers-reduced-motion. Elementor Free doesn't support this natively, so the cards were built as custom HTML and CSS generated via Claude Code and embedded as custom HTML blocks. The seam between native and custom is invisible in the final output.Copy length was a design decision as much as a stylistic one. A line like "Fără contracte lungi. Fără complicații." takes under two seconds to read on a phone screen. Every content block was written and trimmed with mobile rendering as the primary constraint, as long paragraphs collapse into walls of text on a 390-pixel screen, and the reader is already deciding whether to scroll or leave.OutcomeThe site launched as a brand foundation, a credible, professional address for an agency still assembling its full operation. There are no confirmed leads to report, which is an honest outcome for a team that isn't yet in active client acquisition mode. A client returning for a fourth engagement is a different kind of result than a conversion metric, and a more durable one.ReflectionThe clearest thing missing from this project is a prototype phase, not because the outcome suffered visibly, but because the absence of a validation step before build is a real risk, and this time it happened to work out. What probably softened that risk: the client came in with a structured AI-generated sitemap, and the research covered the ten dimensions that matter most for a marketing agency site: goals, IA, CTAs, trust signals, competitor framing. That combination gave the project enough of a foundation that jumping straight to build didn't feel like guesswork. The more substantive tension is the hero image: the team doesn't have professional photos of themselves yet, so free stock imagery was used as a practical stand-in. It's a reasonable call under the circumstances, but replacing it with real team footage remains the single swap that would do the most for the site's credibility once those photos exist.LearningsNo prototype phase is a real risk, unless the brief is solid Skipping a validation step before build is not a process shortcut, it's a bet. What made it viable here was a client-provided sitemap and upfront research across the ten dimensions that drive agency site performance. Structure going in reduced the ambiguity that a prototype would normally catch. That's different from it being safe to skip by default.Repeat clients signal something no metric can A fourth engagement is a more durable form of validation than any conversion dashboard. It means the relationship held under real-world conditions.Stock imagery is a placeholder, not a failure The team doesn't have professional photos yet, so free stock images were used for the hero. That's a practical call, not a shortcut. Replacing them with real team footage remains the single highest-leverage update once those photos exist.
This Portfolio — Launched · 2026A portfolio that opens like a video game and argues like a designer: a cherry-blossom Torii portal you step through before a single project appears. Built solo, end to end, to prove I could craft the one kind of experience no client had ever hired me to make.End-to-end solo build · Cinematic Torii entrance · Built for a fast first loadThe problemThe one thing my client work couldn’t proveMy client projects all say the same thing about me: I can ship something credible under real constraints. None of them say whether I can craft an experience, because no client ever asked me for one; you don’t build a cinematic entrance for a local print shop. This was also personal: I’m drawn to Japan and dream of visiting in cherry-blossom season, and I’m a lifelong fan of how games set a tone before you’ve done anything. I had no case study in either world, so I made the portfolio itself the proving ground: become my own client, and build something unmistakably mine. That set up the contradiction every portfolio has to resolve with no client to hide behind: it has to prove craft, and it has to get out of the way.ResearchBecoming my own clientWith no brief, I wrote one. The reference points were the immersive, game-influenced sites I’d always admired but never been hired to make, and the question underneath every decision was: what would make this feel like the work of someone who sweats interaction detail, without that atmosphere becoming a tax the visitor pays in load time, jank, or motion fatigue?A conventional v1 nailed the content but signalled none of the interaction craft I wanted to be hired forReference sites earned their spectacle through restraint and performance, not just effectsThe risk was clear from the start: an ambitious entrance can strand a recruiter on a phoneThe idea took one commit. Making it survive iPhones, unusual graphics hardware, slow connections, and long idle sessions took twenty. The whole project quietly became a study in how an ambitious experience breaks in the real world, and how to refuse to let it.Key featuresThe Loading ScreenA game-style loader that plays while the heavy 3D entrance loads in the background: a cherry blossom pulsing once every two seconds, ribbons of light swirling around it, petals bursting on each pulse. Built with simple 2D graphics, so it never competes for power with the 3D scene it is covering, and it carries the brand from the very first frame: the blossom reuses the site logo’s own petal path.The Torii EntranceA torii marks a threshold: you pass through it to leave the ordinary world and enter a sacred one. The entrance makes that the literal interaction: a glowing portal sits in the gate’s opening, the camera drifts gently while you wait, then pushes forward and through it, into the work. You don’t look at the entrance. You cross it.Design decisionsThe Entrance as a Threshold: I didn’t want a logo that fades. I built a Torii gate, and the choice of form is the point. In Japanese tradition a torii marks a boundary you pass through to enter a sacred space; that is exactly the job of a portfolio’s entrance, to carry the visitor out of the anonymous web and into my work. So the gate isn’t decoration in front of the content. It’s a doorway whose cultural meaning is its function.The loading screen had to earn its place, so I gave it a job: it covers the wait while the heavy 3D entrance downloads in the background. It uses simple 2D graphics on purpose, so it never competes for power with the 3D scene it’s loading; the curtain doesn’t steal from the stage behind it. It also stays on screen for a minimum of about three seconds. On a fast connection the scene is ready almost instantly, and without that floor the loader would flash on and vanish before the eye could register it. The trade-off is real, since I’m deliberately adding a brief wait, but a jarring flicker was the worse option.The loader also taught me where my own quality bar was. In the first version the swirling light looked cheap, like a string of beads instead of a flowing ribbon. I rebuilt it from scratch as one continuous strand of light, so it reads as a living filament rather than a chain of dots. And I shaped it to fade out wherever it crosses the loading text, so it never once covers the word “Loading.” Even inside the spectacle, legibility comes first.I built a beautiful door, then made sure no one is forced to walk through it twice.Never Strand the Visitor: An impressive entrance is worthless if it strands someone, so two safeguards were non-negotiable. First, the full intro plays only once per visit, so return visitors go straight to the work instead of sitting through it again. Second, before the 3D scene even tries to load, the site checks whether the visitor’s device can actually run it. On some machines it can’t, and an early version left those people stuck on a broken, empty screen with no way forward. The fix was to catch that case up front and send them straight into the site, skipping the entrance entirely. A first impression isn’t finished until it fails gracefully.The portal’s glow looks right on most devices but renders incorrectly on iPhones. The lazy fix is to switch the glow off for everyone, but that punishes the majority for one platform’s quirk. Instead, iPhones get a simpler version while every other device keeps the full glow. A report that “the reflection looks too dark on mobile” turned out not to be a brightness bug at all, but a side effect of that simpler iPhone version. Diagnosing it correctly is the difference between a lazy fix-it-everywhere and giving each device the best version it can actually display.Performance was treated as part of the design, not a cleanup task at the end. The entrance’s heavy background images were converted to a lighter file format, cutting the first-visit download by about 90% (from ~3.1MB to ~285KB), so the entrance loads quickly even on a phone. The falling-petal animation was rebuilt so it stays correct on slow devices: a weaker phone shows fewer frames, but the motion never drifts into slow motion. And I limited how hard the scene works, so it never overheats a device or freezes when left open for a long time. Each of these protects the same thing: the beauty is never allowed to cost the visitor speed or stability.Restraint Is the Last Layer: The final commits (“Calm the hero,” “Make loader ribbons continuous,” “Reduce idle motion density”) all remove animation I’d added earlier. Built at full ambition, the site had a dozen things moving at once, and motion only reads as premium when there’s calm around it. Knowing when “alive” has tipped into “restless,” and pulling it back, was the most senior move in the sequence. The entrance stays lavish; the rooms behind it learned to be quiet.OutcomeThe portfolio ships an entrance that genuinely feels like mine (a threshold with cultural logic behind it, not ornament) and that degrades gracefully to a fast, conventional site the moment a device can’t support it. For a portfolio whose whole job is to impress without ever stranding a recruiter on a phone, that’s the right trade, and making it cleanly is the result I’m proudest of. The supporting hard number is the ~90% reduction in entrance payload. The honest gap: the outcomes that would actually validate this (clicks into case studies, contact conversions) aren’t measurable yet. Analytics and Speed Insights are in place, but the custom events that would tell me whether the entrance helps or quietly filters people out don’t exist yet. I can tell you the entrance is disciplined. I can’t yet tell you it works.ReflectionThe vision was the easy part; refusing to let it break on someone was the work. The biggest lesson was that adapting to each device beats switching effects off for everyone: every win came from detecting what a visitor’s device could handle and giving it the best version it could run, rather than stripping the ambitious parts out globally to play it safe. The second was that restraint is a feature you add last: the motion got better when it got quieter, and I had to build the maximal version first to learn what to take away. What I’d do differently: measure intent from day one. A portfolio exists to drive clicks into the work and into contact, and right now my analytics can’t see whether mine does. That tracking should have shipped with the first analytics setup, not as a follow-up, because the most important thing about this experiment is the one thing I still can’t measure.LearningsThe hard part is keeping it from breaking Inventing the experience took a day. Making it work on every phone, slow connection, and unusual device took weeks. The vision is the easy part; refusing to let it break on someone is the real work.Adapt to the device; don’t strip it for everyone Every win came from detecting what a visitor’s device could handle and giving it the best version it could run, not from removing the ambitious parts for everyone to play it safe.Restraint is a feature you add last The motion got better when it got quieter. I had to build the maximal version first to learn what was worth keeping and what to take away.