Inside NearYou: Next.js, Node.js, and the life of a local offer

Written by

How the customer, business, and admin areas share a backend, from discovering an offer to redeeming its QR code.

Published on

Inside NearYou: Next.js, Node.js, and the life of a local offer

Updated

One offer, several people

NearYou connects people in Romania with local businesses and their offers. The public pages let visitors browse categories, offers, and business profiles. Behind that discovery experience are separate workspaces for customers, business owners, and administrators.

The architecture becomes easier to understand by following one offer. A business creates it, a customer claims it, and a member of the business validates it. Every interface needs to agree on what happened.

Next.js handles the interface and the API

NearYou uses Next.js and React for the interface, with TypeScript across the application. Its Node.js backend is implemented through Next.js route handlers. It is one application with server-side routes, plus separate Node.js processes for background workers and scheduled jobs.

Prisma connects the application to MySQL. Redis and BullMQ support queued work such as notifications and email campaigns. MinIO stores media, which the application serves through its own media routes. Stripe handles subscription payments, with webhook processing in the backend.

This arrangement keeps the offer rules and the interfaces in the same codebase while giving slower background tasks their own processes.

NearYou public offer catalogue

The public catalogue, captured on 19 September 2026.

Claiming an offer is a server operation

When a customer claims an offer, the backend checks authentication, eligibility, and limits. It rejects attempts by a business owner to claim their own offer. An idempotency key can identify a repeated request.

The important checks run again inside a database transaction with a row lock. That matters when two requests arrive close together: the decision needs to use the current database state, not the value a browser saw earlier.

Redemption has its own controlled state change. A business can scan the QR code or enter a code manually. The backend records the transition and uses a deduplication key when awarding loyalty points. Those mechanisms address repeat submissions at the point where data changes.

Each role sees its part of the work

Customers can manage claimed vouchers, follow businesses, and track points and notifications. Businesses manage profiles and offers, review claims, validate redemptions, and consult activity statistics. Administrators approve businesses and work with users, categories, content, campaigns, and support.

NearYou page for businesses with its published dashboard preview

The public business page includes a dashboard preview. This is a capture of that page, not a private account session.

The same application data connects these areas. The customer needs a usable voucher; the business needs to know whether it is valid; the administrator needs tools to manage the platform.

Background work has a separate place

Sending a campaign or processing notifications should not occupy the request that displays a page. NearYou runs workers and scheduled jobs separately from the web process. Payment webhooks also have signature verification and recorded processing state to handle duplicate deliveries.

The system's complexity comes from these connected workflows. Next.js and Node.js provide the application structure; database transactions, role checks, and background workers define how the product behaves when people use it.

Explore NearYou · View the project

Architecture details come from the project source. Screenshots show the public website.

Talk to me

Tell me what you have in mind. I usually reply within one working day.