How I’m Building a Flutter POS MVP With DeepSeek and OpenCode

The code is becoming the least interesting part. The work is deciding what is worth putting in front of a real customer.

A tablet terminal and receipt printer sit at a trail crossroads leading to a warm café.

I am building a Flutter point-of-sale MVP for a real beta user in a coffee business. I used ChatGPT to research the product space and turn the work into a PRD and engineering plan. Then I used OpenCode with DeepSeek to turn those specifications into an application. I barely know Dart. That increasingly feels beside the point.

This is not an experiment in whether an AI model can write code. We already know it can generate a plausible screen, hook up a service, or explain a compiler error faster than a person can start from a blank file. The more useful question is how many decisions still require me before a useful product can reach a customer.

I wrote a short field note about the experiment on X. This is the longer version: what I am asking the agents to do, what I am still responsible for, and why that distinction matters more than the framework or model name.

The real constraint is a useful beta

The goal is not to produce an impressive repository. It is to give one real person a mobile POS they can use, on iOS and Android, soon enough for their feedback to change the product. That makes the usual implementation questions smaller than they first appear.

Framework choice, backend structure, design systems, and test setup all matter when they affect that outcome. They are not the outcome. For an MVP, I keep coming back to a simpler set of questions: does somebody need this, does it solve their problem, can we put it in their hands quickly, and will they actually use it?

Generating code because code is now cheap is no more meaningful than composing random notes because you own a guitar.

That is the constraint I want the agents to inherit. A detailed feature list without a user-facing reason is still an expensive way to make noise. Clear intent gives the code a direction and gives me something concrete to review.

Specifications before code

I started away from the Flutter project. ChatGPT helped me research the POS space, clarify the workflow for the beta user, and produce a PRD and engineering plan. Those documents are not a substitute for talking to a customer. They are a way to turn what I learned into a shape an implementation agent can inspect.

With that work in hand, OpenCode and DeepSeek have a much better assignment than “build a POS app.” They can work from a defined product outcome, constraints, and acceptance criteria. I can ask for a narrow screen or flow, let the agent inspect the repository, and require it to report what changed and how it checked the result.

The agents have bootstrapped the application, opened simulators, worked through a generic receipt-printer connection, and produced an OpenAPI specification so the mobile app can be compared against a separately developed backend. These are meaningful pieces of engineering work. They are also only useful because they serve a path toward a person using the product.

What the brief needs before an agent starts

  • The behavior that should become true for the beta user.
  • The parts of the product or interface that must remain unchanged.
  • The systems and decisions that are in scope for this assignment.
  • The evidence needed before the work can be reviewed.

Dart is not the point

I do not mean that technical knowledge is irrelevant. Someone still needs to notice a bad abstraction, a risky integration, a broken user flow, or a change that will be painful to maintain. What is changing is where that knowledge earns its value.

I barely know Dart, but I can read a plan, inspect a diff, run the app, and decide whether a checkout flow matches the way a small coffee business actually works. I can see when the receipt printer does not behave like the hardware in front of the beta user. I can decide whether a feature belongs in the first release or whether it is an attractive detour.

That makes unfamiliarity with a language less of a stopping point. The agent can carry more of the low-level translation from an explicit intent into a Flutter implementation. My attention can stay on the product, the seams between systems, and the evidence that the behavior is real.

A small DeepSeek and OpenCode starting point

If you want to try this workflow, begin with a small, non-sensitive task in a repository you can verify. OpenCode’s provider flow lets you run /connect, choose DeepSeek, and enter an API key without putting it in project files. Then use /models to select an available DeepSeek model. Both projects document the connection path: OpenCode’s provider guide and DeepSeek’s agent integration guide.

/connect
# choose DeepSeek and enter the key outside the repository

/models
# choose a DeepSeek model

# Then give it one bounded task:
# describe the user-facing outcome
# name what must not change
# ask it to inspect before editing
# require tests or a manual check in the final report

The first task should be deliberately boring: a narrow UI adjustment, a well-described bug, or a test for existing behavior. The point is to learn how the model works in your codebase and how you will evaluate its work—not to hand it the largest, vaguest problem you have.

From there, I use the same loop repeatedly: specify the outcome, delegate bounded work, and verify it against the brief. A capable agent can save a lot of time in the middle. It should not silently decide the beginning or the end.

Keep judgment at the center

Traditional engineering conversations often optimize implementation first: which framework to use, how to structure a backend, which design system to add, or how a test should be written. Those are important decisions when they change the outcome. But they are not the only decisions, and they are often not the most expensive ones to get wrong.

The human work is increasingly the work upstream and downstream of generation. Upstream, it is deciding whose problem is worth solving, what the first version needs to prove, and what can wait. Downstream, it is reviewing the result, making tradeoffs visible, putting the product in front of a customer, and learning from what happens next.

While the agents move an assignment forward, I can work on another business, sit in meetings, sell coffee, or think about the actual product. That is not an argument for being hands-off. It is an opportunity to spend less attention narrating file operations and more attention on the decisions only a person close to the customer can make.

Use agents with care

More capable implementation does not remove the need for caution. Do not casually paste sensitive customer data, secrets, or an unfamiliar private repository into a provider workflow. Keep credentials out of source control, understand where a provider stores them, and use the minimum access needed for the task.

Do not treat a confident summary as proof either. Review the important diff. Run focused tests. Open the iOS and Android simulators. Exercise the flow a customer will touch. With hardware, use the real device whenever you can: a generic receipt printer that connects in a test run can still fail in the conditions that matter.

Finally, keep the high-consequence decisions human-owned. Adding a dependency, changing a public contract, storing customer data, expanding the MVP, or deciding that a result is ready for a beta user are not chores to outsource. The agent can provide investigation and implementation; accountability stays with the person shipping the product.

The code is becoming cheaper. Intention is not.

I am not trying to produce more code. I am trying to provide value to a real user with the smallest amount of human attention necessary, then discover which parts of software development still genuinely require us.

The answer, so far, is not “none.” Judgment, intention, and knowing what is worth building are becoming more valuable as implementation gets easier to generate. That is the part of the work I want to protect.

Article feedback

Was this article helpful?

José Salcido

Independent software builder at Bear Trail.

Discuss your project: [email protected]