Doc. AM-CS-001 Case study Marketplace In production

Ren
tool

Rent power tools, site plant and event kit from people nearby — by the day, the week or the month.

Apps in the monorepo3 — client, admin, API
LanguagesHebrew · English · Arabic
DataMongoDB · Elasticsearch
MarketIsrael · ILS
00

Brief

The problem, and the shape of the answer

A concrete saw gets used four times a year and sits in a shed for the other 361 days. Rentool is the marketplace that gets it to the person two streets over who needs it on Thursday — with a contract that both sides actually signed.

The category is power tools, site plant, access equipment, garden machinery and event kit. The hard parts were never the listings. They were trust between strangers exchanging expensive hardware, and a country that reads in two directions.

The Rentool home page in Hebrew, reading right to left: a hero with a search field, three cards for tool rental, services and job listings, and a grid of equipment categories.

Figure 00.1 — The live client, Hebrew default. One model behind the three cards: rental, services and jobs.

01

One model, four listing types

Rental, sale, service, job

Listings default to rental, but second-hand sales, services and job postings run through the same model and are reachable by a query parameter rather than a separate subsystem. One create-edit flow, one moderation queue, one search index.

The differences that do exist are policy, not structure: services and jobs carry free-tier quotas, and job listings add applications with CV upload into private storage and a poster-side review workflow.

RentalDay · week · month, contract required
SaleSecond-hand goods
ServiceFree-tier quota applies
JobApplications, CV upload, review flow
03

Contracts

The feature the whole marketplace rests on

Every rental is backed by a mandatory PDF contract with placed signature fields, e-signature, a stamped certificate and an audit trail.

This is the difference between a classifieds board and a rental marketplace. Someone is handing over a ₪6,000 machine to a stranger; "we messaged about it" is not a position to be in when the machine comes back broken.

Signature fields are placed on the document rather than appended to it, so the artefact reads like the contract it is. The stamped certificate and audit trail are what make it hold up afterwards — who signed, when, and against which version of the document.

The same versioning discipline covers platform terms: seller and buyer declarations are stored as versioned, append-only acceptance records. Nobody's past consent is silently rewritten when the terms change.

Figure 03.1 — Awaiting capture
Contract signing: placed fields and stamped certificate

Not captured: the signing flow sits behind authentication and shows real counterparty names. Needs a redacted capture, or a screenshot taken against seed data.

04

Trust & safety

Reputation, messaging, moderation

Buyer–seller conversations are threaded against the listing they concern, with a separate admin support channel. Ratings are user-to-user on public profiles. Moderation runs from an admin dashboard covering listings, users, categories, reports, user dossiers and event logs, with an optional profanity filter that raises reports automatically.

04.1

Identity

Email and Google sign-in, verification, email change and password reset, JWT access with a rotating httpOnly refresh cookie, reCAPTCHA v3.

04.2

Reputation

1–5 user-to-user ratings surfaced on public profiles, tied to real transactions rather than free-floating reviews.

04.3

Oversight

Dossiers and event logs give moderators the history behind a report instead of a single decontextualised message.

05

Three languages

Hebrew default, and RTL as a first-class case

Hebrew is the default locale, with English and Arabic alongside — two of the three read right to left. Retrofitting RTL is where marketplaces normally break: mirrored layouts, bidirectional text in user content, locale-correct currency and dates, and search that has to tokenise all three.

Handling it from the start is also why the studio takes Hebrew-market work seriously as a specialism rather than a translation task.

Default localeHebrew
Also servedEnglish · Arabic
DirectionFull RTL layout mirroring
FormattingLocale currency and dates, ILS
06

Operations

Three apps, one pipeline

The monorepo ships an installable Angular PWA client with a service worker and an update banner, an Angular admin panel, and an Express API serving REST and Socket.IO over JWT. MongoDB is the store, Elasticsearch the index; Redis, Cloudinary, SMTP, Web Push and Firebase sign-in are all optional and degrade cleanly in development.

Operationally the admin side carries the things that get needed at the worst possible moment: server metrics, maintenance actions, database backups with a restore planner, segment exports, and per-user data export and erasure. Merging to main deploys.

ClientAngular PWA, installable
APIExpress + Socket.IO, JWT
Optional servicesRedis · Cloudinary · SMTP · Push
NotificationsEmail · Web Push · in-app
ReleaseMerge to main deploys
← Back to the index
Rentool · In production Doc AM-CS-001 Locales 3 IL