Tender management platform for SSA Baltic

A custom two-portal web application for a Lithuanian construction company β€” role-based access, a reverse-auction bidding engine, and full tender lifecycle management built from scratch.
Baltic Platform for tenders

Services Provided:

UI/UX Design, Development

Industry:

Construction

Tool:

React.js + Node.js

Location:

Europe

Overview

SSA Baltic had no digital procurement workflow. Bids were collected by email, compared manually, and outcomes recorded outside any system.

We designed and built Tendio β€” a React and Node.js web platform with two role-based portals: an admin interface for managing tenders and users, and a participant portal for registered contractors to bid. Both share the same API and database, but diverge completely at the routing, permission, and UI level.

The bidding model is a reverse auction β€” contractors compete by reducing their price per work item. The admin monitors all bids in full; participants see only anonymised market signals. Winner selection is always manual.


UX Design & Development

Challenge:

  • Winner selection couldn't be automated β€” price is one factor, not the outcome.
  • Participants needed live pricing signals without ever seeing competitor identities.
  • Every tender has a different structure β€” work items, columns, and step values vary per project.
  • New participants required multi-step verification plus admin approval before any access.

Solution:

  • Manual winner assignment β€” admin selects from a dropdown after reviewing all bids.
  • API returns only aggregated lowest-bid values per row β€” no names, no full breakdowns.
  • Dynamic Table of Works β€” schema stored per-tender, fully configurable without code changes.
  • 5-step registration with email and phone verification, then a pending-approval gate.

Results

A working procurement system

Based on Client's requirements, we designed and built full-scale procurement system. Both portals are in active use. Suppliers track tenders, place bids, and receive outcome notifications. The admin manages the full cycle without leaving the platform.
A working procurement system

Tech Stack

Design
Figma UI/UX
Frontend
React.js
Backend
Node.js
Database
PostgreSQL
Notifications
Twilio SMS
Email
Email Builder
Documents
Google Drive API
Infrastructure
REST API

Two portals. One design system.

Admin and supplier portals share the same component library, color system, and interaction patterns β€” but serve completely different purposes.
Admin
Admin

Full lifecycle management β€” create tenders, monitor live bids, manage users, select winners. The admin sees named bid data, full user profiles, and activity logs.

  • Tender creation wizard with dynamic work table and per-column bid steps
  • Live bid monitoring β€” named columns, per-row totals, side-by-side comparison
  • User management β€” approval gate, status control, tabbed profile view
  • Per-user activity log with IP, browser, device, and geolocation per event
  • Email and SMS notification templates, configurable per event type
Supplier
Supplier

Scoped bidding workspace β€” only invited tenders, anonymised competition data, personal bid history. Suppliers never see other participants' names or full bids.

  • Dashboard with active, draft, and finished tender cards and outcome badges
  • Interactive bid table β€” click any cell to open a context drawer and place a bid
  • Anonymized lowest-bid signal per row β€” returned by API, not filtered in UI
  • Document upload and access to admin-provided materials via Google Drive links
  • Outbid alerts and outcome notifications via email and SMS
Guest
Guest

Unauthenticated visitors see public tender listings only. Registration triggers a 5-step verification flow, followed by a pending-approval gate before any access is granted.

  • Public tender names and basic descriptions β€” no bid data or document access
  • 5-step registration: company details, contact info, password, email and phone verification
  • Account enters Pending state until admin approves β€” access scope changes immediately on approval

Tender Creation

The Client needed a smooth tender creation flow, and our solution ensured clear UI/UX and technical implementation. The creation flow is split across three independent tabs β€” project basics, a dynamic work table, and participant documents. The tender auto-saves as Draft at every step. Work items, bid column names, and minimum step values are all stored per-tender β€” no global templates, no shared structure between tenders.
Tender Creation

Bidding Table

Bidding is definitely a core of the Auction system, so we carefully documented requirements and implemented bidding mechanism in terms of UI and technical solution. The Table of Works is the core UI component of the platform. During creation it's a configurable schema builder. Once active, the same component renders differently per role β€” the admin sees named bidder columns with full data; the supplier sees their own bids and anonymized lowest-bid signals per row.

Named columns, full data

Each participant gets a column with per-row totals and a cumulative sum. Expandable to full per-cell breakdown. Selectable for side-by-side comparison.

Own bids + market signal

Supplier sees their submitted values. The lowest bid per row is highlighted in green β€” an anonymised aggregate returned by the API, not filtered client-side.

UI changes with lifecycle

Active: cells are clickable, countdown runs. Finished: read-only, outcome shown. Terminated: locked with an informational banner.

Live bid table β€” custom columns with per-row totals and lowest-bid signals per participant

Live bid table β€” custom columns with per-row totals and lowest-bid signals per participant

All inline operations β€” adding work items, configuring bid columns, attaching documents β€” use a side drawer that keeps the table visible behind it. The admin never loses positional context while editing. Every destructive action requires a confirmation modal. Same pattern used consistently throughout both portals.
Bidding Table popup 1
Bidding Table popup 2
Finished state β€” winner confirmation banner

Finished state β€” winner confirmation banner

User Management

We created a three-tab user profile structure that keeps everything the admin needs in one place β€” company details, a complete tender participation history with per-bid breakdown, and a timestamped activity log. Account status changes propagate to access scope immediately.
User list β€” Pending / Approved badges, bulk approve action

User list β€” Pending / Approved badges, bulk approve action

Tender drill-down β€” full bid breakdown and participant documents

Tender drill-down β€” full bid breakdown and participant documents

User profile β€” company info, approval actions pinned in footer

User profile β€” company info, approval actions pinned in footer

Log History β€” per-event audit trail with IP, browser, device, location

Log History β€” per-event audit trail with IP, browser, device, location

What We Achieved Together

Icon

Admin and supplier portals built on a shared component system β€” diverging at routing and permission level, not at infrastructure.

Two portals, one codebase

Icon

Work items, column names, and step values stored per-tender. Any structure the admin configures is exactly what suppliers bid into.

Per-tender dynamic schema

Icon

Draft, Active, Finished, and Terminated each change what's visible and interactive β€” enforced at the component level, not left to user discretion.

Status-driven components

Icon

Per-user event logs with IP, browser, device, and location on every action. Designed for auditability from the start.

Timestamped activity logs

Icon

Twilio SMS and a configurable email builder for outbound comms. Google Drive as document layer β€” no file storage infrastructure required.

Notifications and documents

Icon

Side drawers for all inline editing. Confirmation modals for destructive actions. Status banners for edge-case states. One pattern set across both portals.

Consistent interaction system

Innovate with us

Our creative solutions have helped clients raise $100+ mln and expand their reach.

pic