Project — 2026
HiroCRM
A small sales workspace for keeping contact history, follow-up deadlines, and the next conversation within reach.
A sales conversation often continues across several days. A buyer asks a question, someone sends a quotation, and the next reply arrives after other work has intervened. At that point, a record of the last exchange becomes useful. It tells the person picking up the conversation where to begin.
HiroCRM puts that record beside the lead. It is a self-hosted tool for a small international sales team, with a dated history of follow-ups and a clock for the next response. Open a lead and you can see who is responsible for it, read the recorded exchanges, and consult attached screenshots.
Remembering the next step
The follow-up rules are deliberately explicit. By default, the first response is due within 72 hours; subsequent follow-ups have a 120-hour window. After three recorded touchpoints, the clock is considered complete. These values are configurable, and terminal lead statuses stop the clock too.
That last detail deserves attention. Three entries in a history tell the software that a configured threshold has been reached. The quality of the conversation still depends on what those entries contain and what the buyer needs. The dashboard makes the schedule visible; the team has to decide what to say next.
The current code also pays attention to the less visible work of identifying a contact. An international number written with 00 can be normalized to the same key as its valid + form. Email keys ignore letter case. The original contact text remains available for display. Domestic-looking digits keep their ambiguity: automatic country detection requires an explicit international prefix.
This gives duplicate checking a defined basis. It can recognize equivalent supported contact formats; it cannot establish that two unrelated contact details belong to the same person.
Bringing existing records along
A team can import leads from an Excel workbook. The importer reads its first worksheet and reports duplicates and failed rows. A failed row leaves successful neighboring rows imported, so the report matters: it tells you which records still need attention.
Screenshots are stored outside the public web directory and served through a login-protected route. The application data lives in SQLite, with uploaded files stored alongside it on disk. Backups need to preserve both parts together. The operations guide describes the procedure, including stopping the app before taking a filesystem backup.
The size of the promise
HiroCRM currently uses one shared administrator login. Everyone with that credential has the same access. It does not provide individual action attribution, separate permissions, or a way to revoke one person’s access independently. Names assigned to leads identify responsibility for a customer; they do not establish who made an edit.
The repository contains setup instructions and the operations guide.