About

We build small systems around real business problems.

WizeApps is a software studio in Kfar-Saba, Israel. We work with business owners and founders who know what is broken in their day-to-day workflow, but do not want a bloated software project just to fix it.

The work starts before development.

Many software projects fail because the team starts with a list of requested features instead of the actual process. We begin by mapping what happens today: who is involved, what gets delayed, where customers drop off, and which steps need human judgment.

Only after that map is clear do we decide what should be built. Sometimes the right product is a simple intake flow. Sometimes it is a booking system, a private dashboard, or an MVP that tests one business idea. The point is to make software serve the workflow, not the other way around.

We also build and then keep the result running, which changes how we scope. When you know you will still be maintaining something years from now, you stop adding parts nobody asked for. Everything below — the projects, the sequence we follow, the company details — is here so you can check that claim rather than take it on trust.

What we have actually built

Three products are live and you can open all three. The build durations below are the real ones, and they are what we use when somebody asks how long a project like theirs takes — they are the only honest numbers we have for that question, and none of them came from a proposal template.

Each one links to a longer teardown on this site, including the parts that were awkward and what we would do differently.

Consumer web app

Live projectFirst version in about one month

Mincha Time

Mincha Time reminds people when the afternoon prayer window is open where they are. The window moves with sunset, so it is different every day and different in every city, and a reminder that arrives at the wrong minute is worse than no reminder at all. The first version was built in about one month.

Most of the work is behind the screens. A function runs once a minute and checks whether a Firestore document exists for the current time — the documents are keyed hour_minute, so 13_47 is a document, not a queued job. There is no task queue and no per-user cron entry. Users are grouped by rounded latitude and longitude, so the Hebcal zmanim API is called once per location per day instead of once per person, and each run writes tomorrow's bucket for that location before it finishes. The system walks itself forward one day at a time.

The rest is the unglamorous detail that decides whether people keep the app installed: notification copy in six languages, two independent opt-outs that are both checked before every send (a permanent disable and a same-day snooze), and a cleanup job that removes users who have been inactive for 30 days.

Built with: Firebase Cloud Functions, Firestore, Firebase Cloud Messaging, Hebcal zmanim API

Food and delivery

Live projectBuilt in about two months

Domino Ra'anana — online ordering

The pizza ordering site for the Ra'anana branch, built for its owner, Eran Atra, in about two months. It has been in daily use for more than five years. That is the part of this project we point at most often, because a site that is still carrying real orders years later is a different claim from a site that launched.

From the outside it is a menu. The system is the checkout. Delivery-zone rules carry a delivery cost and a minimum order amount, so a zone decides whether an order can be placed at all, not just what the page displays. Cart rules keep a deal and its selectable options intact instead of flattening them into loose line items, because a deal is not a discounted product. Card payment goes through Cardcom, which means the order exists before the payment succeeds and has to be reconciled after it does. A completed order is handed to the branch's Aviv POS, so nobody retypes it into the register.

Staff run the menu, the deals, and the delivery zones themselves through admin screens. That was part of the build rather than a later addition — a menu that only a developer can change is a menu that goes stale.

Built with: Vite, React, Base44, Cardcom, Aviv POS integration

Recruitment platform

Live projectBuilt in about six months

Djob

Djob is a two-sided recruiting workspace: candidates and open roles on one side, the people working through them on the other. It took about six months. That is longer than the other two builds for a straightforward reason — two user flows plus the admin layer that connects them is roughly three products, not one. Its public plans start at $29 per month.

The matching layer is the part worth explaining. Jobs and candidates are broken into structured statements and each statement is embedded with OpenAI's text-embedding-3-small, rather than pushing a whole CV through as one block of text. Cosine similarity then gives a ranking — but a ranking is not a decision, so the score is gated by pass/fail business rules. A candidate can read as close to a role and still fail a hard requirement, and the system says which one.

Rankings are read from precomputed snapshot tables in PostgreSQL that are rebuilt daily, not recomputed when someone opens a page. A recruiter scanning a shortlist will not wait for every pair to be scored live, and if the screen is slow they go back to the spreadsheet they were using before.

Built with: PostgreSQL, OpenAI text-embedding-3-small, Base44

The other half: SDKs, ad tech and AI

Alongside the client builds above, WizeApps works with product and engineering teams on problems that live inside their products rather than next to them: mobile SDKs, ad monetization and ad server integration, identity and signal enrichment, AI features, and the backend and cloud plumbing all of that needs. This part of the work is usually a scoped piece of somebody else's roadmap, not a product with our name on it.

It is described below in engineering terms on purpose. If you are hiring for a technical team, the questions you need answered are what breaks, how it is verified, and what the failure looks like when it happens quietly — not what the category is called.

Mobile SDKs

Code that has to behave inside somebody else's app

An SDK is a different problem from an app. The public surface has to be small enough to explain in a README and stable enough that a host app moving to a new version does not have to rewrite its call sites. Everything behind that surface — initialization, threading, what happens with no network, what happens when a callback arrives after the screen it belonged to is gone — is ours to get right, because the integrating team cannot see into it and should not have to.

Platform coverage is not one job either. Native Android and native iOS are one problem, with two languages, two build systems and two sets of lifecycle rules. React Native, Flutter and Unity sit on top of that as a wrapper layer, and the wrapper is where most breakage happens, because it has to forward every call and every callback the host SDK expects — including the ones that only fire in situations nobody demos.

What the integrator receives is a built artifact, not our source: an APK or AAB on Android, a framework on iOS, a package for the wrapper platform. The artifact is therefore the only thing worth verifying against, and that habit is the second lesson further down this page.

Mobile SDK development

Ad monetization

Ad server and mediation integration

Google Ad Manager, AdMob, IMA for video and GMA for mobile display get discussed as one thing called "ads". They are not interchangeable. Each has its own initialization order, its own request shape and its own failure modes, and treating them as a single swappable component is the ordinary reason an integration is wrong in a way nobody catches.

The characteristic failure in this area is silence. A request that goes out missing a parameter does not throw, does not log an error and does not show a broken screen. It fills. A user sees an ad, the session looks healthy, and the placement earns less than it should have. Nothing in the app is in a state you would call a bug.

So verification is not a code review. It is making real ad requests from the real build and inspecting what went out and what came back, per platform and per format. There is no unit test for "did the ad server receive the parameter we think we sent", and writing one that passes proves only that the code we read does what we read it to do.

Ad monetization and ad server integration

Identity and signals

Signal enrichment, where ordering is the whole game

Identity and signal enrichment has one constraint that is easy to say and easy to get wrong: the adapter has to be registered and ready before the ads SDK initializes, and its readiness has to be awaited rather than assumed. If initialization races ahead of it, the first ad request of the session goes out unenriched. Nothing errors. That request is simply worth less, once per session, on every device.

The second rule is coverage. Enrichment has to happen at every ad-request site in the app — each banner, each interstitial, each rewarded placement, each video slot. Miss one site and that one placement degrades quietly, and it stays invisible in logs unless somebody goes looking for it specifically, which nobody does unless they already suspect it.

Both of those are why this kind of engagement ends with a pass over the installed build watching live requests, and with a written list of every call site we found, rather than with a green test suite.

AI features

The model drafts, the rules decide

The AI work we can point at publicly is inside Djob, and its shape is the shape we reuse. Jobs and candidates are split into structured statement parts, and each part is embedded with OpenAI's text-embedding-3-small, rather than pushing a whole CV through as one blob of text — a blob averages away the specific thing you wanted to match on. Cosine similarity then produces a ranking.

A ranking is not a decision, and that is the part most AI features get wrong. In Djob the similarity score is gated by pass/fail business rules, and when a candidate who reads as close to a role is excluded, the system says which hard requirement excluded them. The model drafts; the rules decide, and the rules are readable by the person who owns the outcome. We would build a summariser, a categoriser or a suggestion feature the same way.

Cost and latency belong in the design from the start. Djob reads its rankings from precomputed snapshot tables in PostgreSQL rebuilt daily, not from pairs scored when a page opens, because a recruiter who waits for a shortlist goes back to their spreadsheet and does not come back.

AI features inside existing products

Backends and infrastructure

The layer underneath all of it

Every project on this page needed the same unglamorous half: scheduled work, a data model that can be queried the way the product actually reads it, an admin screen a non-technical person can operate, and some way to see afterwards what happened. Mincha Time runs on Firebase Cloud Functions with Firestore and Cloud Messaging. Djob runs on PostgreSQL with a daily rebuild. The Domino site has admin screens for products, deals, categories, pizza sizes, beverages, sauces, delivery zones, site settings and orders, because a menu only a developer can change is a menu that goes stale.

Workflow automation is usually one shape: something runs on a schedule, decides whether there is anything to do, and does it. Mincha Time is that at its cheapest — a function every minute, a Firestore lookup for the current time bucket, and almost no cost on the runs where the answer is no. Most automation people ask for is a variation on that, and the interesting decisions are about idempotency and what happens on the run after a failed one, not about the trigger.

What each half taught the other

These two kinds of work are not separate skills that happen to share an office. Each one corrected something the other was getting away with, and it is worth being specific about which is which rather than claiming they are naturally the same job.

From the small-business builds

Scope is a skill you learn by having to finish

Mincha Time was about a month, the Domino ordering site about two, Djob about six. Those numbers exist because each build named the one load-bearing mechanism early and built it first: the minute-resolution scheduler, the checkout and payment state, the embedding and snapshot pipeline. Integration work rewards the same habit, except the load-bearing part is almost never the demo screen — it is initialization order, the release build, and the list of call sites.

From the SDK and ad-tech work

A release build is not a debug build

On Android, release builds run R8 and ProGuard, which can strip or rename classes that an ad SDK resolves reflectively at runtime. That needs keep rules, and reading the source cannot tell you whether the keep rules are correct: the debug build passes and the release build fails on the same code. So for anything to do with packaging, shrinking or keep rules, the only verification that means anything is to build the artifact and open it. Unit tests structurally cannot catch a class that compiled fine and then got stripped out of the shipped bundle.

What both halves agree on

Silent failure is the expensive kind

An unenriched first ad request earns less and reports nothing. The business-systems version of that is a reminder that never sends or an order that never reaches the register — no error, no complaint, just less. Both are handled the same way: check at every site rather than once at the top, and leave something behind you can look at afterwards. Mincha Time checks two independent opt-outs before every send. The Domino site fixes the order of operations so a paid order reaches the Aviv POS and an unpaid one does not reach the kitchen.

How the engineering engagements run

Working inside a team you do not own

With product and engineering teams the deliverable is usually not a product — it is a change inside theirs, plus a build that proves it, plus a note saying what we verified and how somebody else can verify it again. That means their conventions, their branch rules and their release process, not ours, and it means saying out loud which parts we could not prove. Commercially it is priced like the rest of the work on this site: $5,000 to $10,000 per estimated month for a scoped build, positioned in that range by complexity, and $85 to $165 per hour for work after launch, for hours actually worked, with no standing retainer.

The three new service pages — mobile SDK development, ad monetization and ad server integration and AI features inside existing products — go further into each of these, including the checks we run before calling an integration done.

How a build actually runs

The same five steps, in the same order, on every project. Each one below is illustrated with what it looked like on one of the three builds above, so you can see the step rather than just read the label.

01

Map the process that exists today

We write down what actually happens now: who touches the work, in what order, where it waits, and what people do by hand to keep it moving. This is done with real examples from last week, not a hypothetical flow.

In practice: On the Domino build, following a real order end to end is what moved checkout to the centre of the project. Delivery zones, deals, cash versus card and the handoff to the kitchen all live in that one step, so it could not be the last screen we designed.

02

Find the decision points

Next we separate the steps where a person is exercising judgment from the steps where the rule is stable enough to encode. Judgment stays with people. The stable rules are what software can carry without anyone checking on it.

In practice: Djob made this concrete. Matching looks like a pure ranking problem until you notice that recruiters also make pass/fail calls about hard requirements, so the system computes the similarity score and the gates separately, and shows which gate a candidate failed.

03

Scope the smallest useful first version

Then we cut to the version that is small enough to finish and still useful on its own. The test is whether it delivers one real outcome end to end, not whether it covers every case someone can imagine.

In practice: Mincha Time did one job in version one: the correct window for the user's location, and a reminder before it closes. It did not try to become a calendar app. That is why it was about a month rather than a project without an end date.

04

Build the load-bearing part first

We build the mechanism everything else depends on early, while there is still time to be wrong about it. Screens are easier to change late than the thing underneath them.

In practice: In each of the three builds that part was different: the minute-resolution scheduler in Mincha Time, the checkout and payment state in the Domino site, the embedding and snapshot pipeline in Djob. In all three, that is where the first weeks went.

05

Then keep it running

Software in daily use meets things that were not in the plan: a payment provider changes, an API response shifts, volume grows, staff want a field they did not ask for. We stay close enough to the code to handle that, and we say plainly which parts we already know are the weak ones.

In practice: One example we do not hide: Mincha Time reads the UTC offset out of the Hebcal response string to build tomorrow's bucket. It works in production, and it is the first thing we would replace if that response format ever changed.

Who is behind WizeApps

Ohad Mayrom — Founder

Ohad Mayrom is the founder of WizeApps, where he designs and builds booking systems, client intake flows, internal operations tools, and MVPs for small businesses and early-stage founders. He writes plain-language guides to help non-technical owners commission software with confidence.

Ohad runs the scoping conversations and the builds, which is why the three projects above are described down to the level of Firestore document keys and payment reconciliation rather than in marketing language. If you email about a project, you are writing to the person who would work on it.

The SDK, ad server and identity sections above come from the same pair of hands. They are written as failure modes rather than as a feature list because failure modes are what you learn from doing the work: which build configuration hides a problem, which callback never fires on one platform, which request went out without the parameter you thought you attached.

Every guide published in the resources section is written and reviewed by Ohad, based on the patterns that come up repeatedly in real client conversations — booking systems that get routed around, MVPs that grew too large before launch, and manual processes that quietly outgrew their spreadsheets. Questions and corrections are welcome at hello@wizeapps.agency.

Connect on LinkedIn

Principles that guide every build

These three sit underneath the five steps above. They are short because they are decision rules, not a manifesto: when a project has to choose, this is how it chooses.

01

Clarity before code

We define the problem and the decision points before designing screens or choosing tools.

02

Useful over impressive

A quiet tool that saves staff two hours every day is more valuable than a polished feature nobody uses.

03

Launch small, learn fast

The first version should create evidence quickly so the next version is based on real use.

Company details

WizeApps is a software company registered in Israel. The brand is newer than the company: WizeApps is the name the company started trading under in 2026, and the projects on this site predate it — the Domino Ra'anana ordering site has been taking orders for more than five years. If you want to know who is behind the site before you write to anyone, this is it — a real company with an address and a phone number, not just a contact form.

Registered name
המכון לאפליקציות חכמות
Address
117 Weizman Street
Kfar-Saba, Israel
Languages
English and Hebrew. There is a Hebrew version of this site at wizeapps.agency/he.

Write to hello@wizeapps.agency or call the office line above — both reach the same person, and the reply comes from someone who understood the question. If you would rather start with the workflow questions we ask first, they are listed on the contact page.