Author: calvinseng

  • Reading a BaZi chart without the mysticism

    BaZi (八字, literally “eight characters”) gets dismissed by skeptics as fortune-telling and oversold by hype as prophecy. Both miss what the framework is actually built to do. Strip away the theatre and it’s closer to a structured personality-and-timing model than a crystal ball — one that happens to have a few thousand years of recorded use behind its categories instead of a few decades.

    The mechanics, briefly

    A BaZi chart maps someone’s birth year, month, day and hour to four “pillars,” each made of a Heavenly Stem and an Earthly Branch. Every stem and branch belongs to one of the five elements — wood, fire, earth, metal, water — the same five-element logic running through the rest of Chinese metaphysics. The day pillar’s stem is the “Day Master”: the element read as closest to the person themselves. The rest of the chart describes what supports that Day Master, what drains it, and what’s missing.

    None of that is a claim about fate. It’s a structured way of encoding a starting position — the same way a psychometric framework encodes a personality type, except built from a much older and more granular alphabet.

    What it’s actually good for: tendency, not prophecy

    The useful output of a reading isn’t “this will happen to you.” It’s tendency and timing. Tendency: does this person’s chart lean toward steady accumulation or toward bursts of action followed by rest; where does their effort tend to compound, and where does it tend to leak. Timing: the luck pillars (大運), ten-year windows layered on top of the birth chart, describe which elements are strengthened or weakened in a given period — useful as a prompt for “is this a season to push or to consolidate,” not as a countdown to a specific event.

    Treated this way, a BaZi consultation sits closer to a structured self-reflection tool than to a prediction. It gives language to a pattern someone half-already-knows about themselves, and a frame for a decision they’re already weighing — when to start something, when to hold, which kind of role or partnership tends to suit them.

    What it isn’t

    It isn’t an excuse for fatalism (“my chart says I can’t”), and it isn’t a substitute for the actual decision in front of someone. We treat it the way we’d treat any diagnostic framework: useful for describing a pattern, useless as a reason to avoid acting on it.

    Why we read it the way it’s been read for a few thousand years

    The five-element logic underneath BaZi is the same logic behind Feng Shui, and it’s not a coincidence that it’s also the organising idea behind how we think about the rest of what we do — wood, fire, earth, metal and water as different ways energy moves and gets checked. A reading, at its best, is a mirror with unusually good resolution. What you do with the reflection is still entirely up to you.

  • One codebase, three platforms: when Capacitor is the right call

    “Native or hybrid?” is the wrong first question. It assumes every mobile app is competing on the same axis — buttery 120fps animation, deep OS integration, the feel of a flagship consumer app — when most business apps are competing on a completely different one: does it exist on iOS, Android and the web before the budget or the runway runs out.

    What Capacitor actually is

    Capacitor isn’t a rendering engine reinventing native UI in JavaScript. It’s a thin native shell around a web app, with a plugin bridge that exposes device APIs — camera, GPS, push notifications, offline storage, biometric auth — to that web code. The UI is whatever web framework you already use (we reach for Angular or React); the “native” part is mostly device access, packaging, and app-store distribution.

    That framing matters because it tells you exactly what you’re trading. You keep one codebase and one team. You give up pixel-perfect native gesture fidelity and the very latest platform-specific UI conventions the day they ship.

    Where it genuinely wins

    Capacitor is the right call for what we’d broadly call operational software: a driver app that needs GPS and a camera for proof-of-delivery photos, an inspection or field-audit tool that has to work offline and sync later, an internal dashboard that also needs a “real app” icon on a warehouse tablet, a booking or account-management app where the ceiling is “clear and reliable,” not “delightful to swipe.” In all of these, the deciding factor is speed to a working product on every platform a client’s team actually uses, not animation fidelity.

    It’s also the pragmatic choice for teams that are strong on the web and don’t have (or don’t yet need) dedicated iOS and Android engineers. One React or Angular team, one design system, three release targets.

    Where it doesn’t

    Don’t reach for it when the product’s whole pitch is how it feels: a game, a camera-first social app, anything living or dying on complex native gestures, custom transitions, or hardware-accelerated effects a WebView can’t match. And be honest about scale — a very large, long-lived consumer app with dozens of engineers will usually outgrow a shared web codebase eventually, and it’s worth knowing that going in rather than discovering it at year three.

    Keeping the native escape hatch open

    The part people underrate is that Capacitor doesn’t lock you in the way some older hybrid frameworks did. Its plugin architecture lets you write a genuinely native module in Swift or Kotlin for the one screen that needs it — a camera flow with specific hardware requirements, say — and call it from the same shared app, without rewriting everything else. You’re not choosing hybrid forever. You’re choosing hybrid until a specific feature earns the cost of going native, and shipping on all three platforms in the meantime.

    A rule of thumb

    If you can describe the app mostly in terms of forms, lists, data, and a handful of device APIs, Capacitor will get you to the App Store and Play Store faster than almost anything else, on a budget for one build instead of three. If you can only describe it by how it feels in the hand, start planning for native.

  • The Core Web Vitals that actually move rankings

    Core Web Vitals get treated as a compliance checkbox — a score to chase in a Lighthouse report, disconnected from anything a visitor actually feels. That’s backwards. The three metrics Google measures (Largest Contentful Paint, Interaction to Next Paint, and Cumulative Layout Shift) are trying to quantify the same three things that make a site feel fast or feel broken. Fix them in the wrong order and you’ll spend a week on work nobody notices.

    LCP: how long until the page feels there

    Largest Contentful Paint measures when the biggest visible element — almost always a hero image or a headline block — finishes rendering. On most Singapore SME sites we audit, the largest single cause is an unoptimised hero image: a 3–4MB JPEG straight off a phone, serving the same file to a 4-inch screen and a 27-inch monitor.

    • Serve modern formats (AVIF/WebP) at the actual rendered size, not the upload size.
    • Mark the hero image as a high-priority fetch instead of lazy-loading it — lazy-loading the one image everyone waits for is a common self-inflicted wound.
    • Check server response time (TTFB) before touching the front end. A CDN edge and a host with a Singapore or nearby region will often close more of the gap than any client-side fix.
    • Trim render-blocking CSS and fonts. A single unoptimised Google Fonts import can add several hundred milliseconds before anything paints.

    INP: how the page responds once someone touches it

    Interaction to Next Paint replaced First Input Delay as the responsiveness metric, and it’s stricter — it measures the worst interaction on the page, not just the first one. The usual culprit is JavaScript: a heavy analytics or chat-widget bundle blocking the main thread right when someone taps a menu or an “add to cart” button.

    • Audit third-party scripts first. Tag managers, chat widgets and review-carousel plugins are the most common source of long tasks on WordPress sites.
    • Break up long-running JavaScript with smaller tasks, or defer anything that isn’t needed for the first interaction.
    • Avoid layout thrashing in event handlers — reading and writing to the DOM in the same tick is a quiet but frequent cause of jank.

    CLS: does the page hold still

    Cumulative Layout Shift is usually the cheapest of the three to fix and the most annoying when it’s wrong — a page that jumps as an image, an ad slot, or a font loads in is the fastest way to make a fast site feel unstable.

    • Always set explicit width and height (or an aspect-ratio box) on images and embeds, so the browser reserves space before the asset arrives.
    • Use font-display: swap or, better, preload the font file so text doesn’t reflow when a web font finally loads.
    • Never inject a banner, cookie notice, or promo bar above existing content after the page has settled.

    A practical order of operations

    When a site fails all three, this is the order we work in: hosting and TTFB first, because everything else is downstream of it; then LCP, because it’s the one visitors consciously notice; then CLS, because it’s usually a few lines of CSS; then INP, which tends to need the most careful profiling and pays off the least in raw ranking terms but the most in how the site actually feels to use.

    And measure with field data, not just a lab score. Lighthouse runs once, on one connection, with no real user behind it. The Chrome UX Report and Search Console’s Core Web Vitals panel show what’s actually happening across your real visitors — on real Singapore mobile networks, on real mid-range Android phones — which is the only version of “fast” that Google’s ranking systems, and your customers, are responding to.

  • Clarity is the product

    Ask what a website is for and most people answer with the wrong noun. A website isn’t a deliverable — a page count, a colour palette, a stack of features signed off in a proposal. It’s a decision-making tool. So is a photograph. So, as it turns out, is a BaZi reading.

    We didn’t set out to run five businesses side by side. We noticed, somewhere in the second or third year of doing this, that the actual product was the same across all of them: someone arrives confused about a decision, and leaves with enough clarity to make it.

    The website is never the point

    Nobody wants a website. They want customers to understand what they do in four seconds instead of forty, or an internal team to stop emailing spreadsheets back and forth, or a store that doesn’t lose the sale on a slow product page. The website is just the mechanism. Build the mechanism without understanding the decision it’s supposed to support, and you get a technically competent site that doesn’t move the number anyone actually cares about.

    That’s why the first real conversation on any build is rarely about design. It’s about the decision on the other end: what does someone need to see, and in what order, before they act?

    A photograph does the same job

    A good portrait or brand shoot isn’t about flattering light, although that helps. It’s about choosing what to leave out of the frame so the thing that matters — a founder’s actual manner, the texture of a product, the mood of a space — is what a viewer’s eye lands on first. Take away everything competing with it, and you’re left with a photograph that tells someone what to expect before they’ve read a word of copy.

    And so does a BaZi chart

    This is the part people find hardest to take seriously, usually because they’ve only encountered the fortune-telling version of it. Stripped of the theatre, a BaZi reading is a structured way of describing tendency: how someone tends to make decisions under pressure, where their effort compounds and where it leaks, what kind of season they’re in. It’s not a prediction. It’s a framework for reading a pattern in a person, the same way a technical audit reads a pattern in a codebase, or a keyword map reads a pattern in search demand.

    The habit of mind doesn’t change

    What’s constant across all of it is a habit: take something that looks complicated or opaque, find the two or three variables that actually explain most of what’s happening, and hand the person in front of us a version of the picture they can act on. Some days that’s a performance report. Some days it’s a five-element chart. The tool changes. The habit of mind doesn’t.

    If there’s a pitch buried in this, it’s a narrow one: whatever you come to us for, don’t expect a deliverable for its own sake. Expect to leave clearer than you arrived.

  • Hello world!

    Welcome to WordPress. This is your first post. Edit or delete it, then start writing!

MySQL Queries: 4 Hooks Flush Rules DOMContentLoaded: ... PHP: 8.3.16 WordPress: 7.1 Template: template-canvas.php Request: GET → 200