Frontend Shouldn’t Feel This Hard — But It Does. Here’s How I’m Fixing It with Bellini



This content originally appeared on DEV Community and was authored by David Brown

Let’s talk about frontend development.

You know, the part where design meets data, where UX turns into code, where things get interactive and—hopefully—delightful.

It should be fun.

But too often, it’s a grind. You start with a clear vision and end up wrestling with inconsistent APIs, rebuilding the same UI bits for the tenth time, duct-taping together your state, and praying your layout doesn’t fall apart on mobile.

That was me—again and again—until I found Bellini.

Now, this isn’t a puff piece. I’m not ditching React, giving up code, or abandoning everything I know. I’m still a developer who loves writing code. But I’ve been using Bellini to cut through the noise and actually enjoy frontend work again. Here’s why it works.

The API Hellscape

Ever tried binding dynamic UI to five different APIs, each with its own quirks? Some give you nested objects, others flatten everything. Field names go from snake_case to camelCase and back again. And documentation? Maybe. Maybe not.

With Bellini, the whole thing just… works. I bind components directly to any API—REST, GraphQL, whatever—and Bellini handles the parsing and normalization. And when I pair it with Lonti’s Martini or Negroni on the backend, I get clean, standardized APIs every time.

No more manual mapping. No more guess-and-check.

Stop Rebuilding the Same Stuff

I used to lose whole afternoons rebuilding forms and UI components I’d already made in other projects. Reusability was a dream, but managing it across projects or even pages felt like too much overhead.

Bellini makes it dead simple. Build once, save it as a component, and drop it into any app. Props? Logic? API bindings? All configurable. It’s like a component library with less boilerplate and more reuse.

State Management That Doesn’t Implode

Start with a simple app, throw in a couple of toggles, some filters, and a bit of async data… suddenly you’ve got a state management problem. Redux? Context? useState + useEffect + too much caffeine?

Bellini handles state out of the box—visually if you want it, or with JavaScript if you need precision. I define app-wide state once and use it wherever I want. No external libraries. No prop-drilling madness.

CSS That Doesn’t Bite Back

I don’t mind writing CSS. I really don’t. But when your carefully crafted layout breaks on mobile because some dynamic data adds a third digit to a number field… that’s when the pain sets in.

Bellini gives me visual layout tools that just get responsive design. Want full CSS control? Take it. Want drag-and-drop speed? Use it. You’re never locked in, and your layouts won’t explode just because the content changed.

The Backend Hookup Doesn’t Suck

Most UIs hit a wall when it’s time to wire things up to real data. Auth, validation, conditional workflows, error handling—it’s a lot. It slows things down.

But when I use Bellini with Martini (Lonti’s backend engine), wiring up frontend to backend becomes pleasant. I can trigger a backend workflow from a button click and be confident that the data will validate, the business logic will run, and the response will come back clean.

It’s not magic. It’s just… integrated.

TL;DR

Bellini helps me build apps faster without forcing me to give up control. I still write code. I still architect systems. I still care about clean design, fast performance, and real usability. But now, I’m spending more time creating—and less time fighting my tools.

If frontend dev is starting to feel more like a chore than a craft, Bellini might just give you some of that spark back.


This content originally appeared on DEV Community and was authored by David Brown