Skip to content
Of Ash and Fire Logo

Real-Time Collaborative Bid Management for Construction

How we built a Notion-like real-time collaboration platform for construction bid management — enabling teams to collaborate during high-stakes bid room sessions.

Overview

Construction bidding is one of the most high-pressure, time-sensitive processes in the industry. When millions of dollars are on the line and dozens of stakeholders need to coordinate across specifications, subcontractor quotes, and compliance documents, the tools teams rely on can make or break a bid. Spreadsheets get emailed back and forth. Version conflicts pile up. Critical updates get lost in threads.

We are currently building a real-time collaborative bid management platform that treats the bid room the way modern tools like Notion treat document collaboration -- as a live, shared workspace where every participant sees changes the instant they happen. Built on Ruby on Rails 7 with the Hotwire stack, this platform is designed to eliminate the coordination failures that cost construction firms contracts.

The Challenge: Why Construction Bidding Needs Real-Time Collaboration

Large construction contract bidding is fundamentally a collaborative process, but the industry has been stuck using tools designed for individual work. The typical bid room scenario exposes several critical pain points:

  • Simultaneous editing conflicts: Multiple estimators work on the same bid package. Without real-time synchronization, one person's changes silently overwrite another's. In a bid worth tens of millions of dollars, a single overwritten line item can be catastrophic.
  • External bidder coordination: Subcontractors and external vendors need temporary, scoped access to submit their portions of a bid -- but they should never see the full internal pricing strategy or competing bids.
  • Time pressure: Bid deadlines are absolute. When a team discovers a conflict or missing document two hours before submission, they need to resolve it in real time, not through email chains.
  • Organizational complexity: General contractors manage dozens of active projects, each with its own bid teams, document hierarchies, and access requirements. Data isolation between organizations is not optional -- it is a business requirement.
  • Document structure: Bid packages are deeply structured documents with nested sections, specifications, and line items. Flat spreadsheets and file-sharing tools cannot represent this hierarchy effectively.

These challenges demanded a purpose-built platform -- not another project management tool with collaboration bolted on, but a system architected from the ground up for real-time, multi-user bid assembly.

Our Solution: Architecture and Technical Approach

We chose Ruby on Rails 7 as the foundation for this platform, paired with the Hotwire stack (Turbo, Stimulus, and CableReady over ActionCable) for real-time interactivity. This was a deliberate architectural decision with significant trade-offs considered.

Why Rails and Hotwire Over a JavaScript SPA

The conventional approach for a real-time collaborative application would be a React or Vue single-page application with a separate API backend. We evaluated this path and chose against it for several reasons:

  • Development velocity: Rails conventions -- migrations, ActiveRecord, built-in WebSocket support via ActionCable -- let a small team move faster than maintaining separate frontend and backend codebases. For a platform still in active development, this velocity matters.
  • Hotwire eliminates the SPA tax: Turbo Frames and Turbo Streams deliver the instant, partial-page updates users expect from collaborative tools, without requiring a full client-side rendering framework. The server remains the source of truth for HTML, which simplifies state management dramatically.
  • CableReady for surgical DOM updates: Where Turbo Streams handle standard CRUD broadcasting, CableReady gives us fine-grained control over DOM mutations. When one user edits a bid line item, CableReady pushes the exact change to every other connected user's browser -- no polling, no full-page refresh, no diffing algorithm running on the client.
  • Reduced infrastructure complexity: A monolithic Rails app with ActionCable handles HTTP requests and WebSocket connections in the same process. There is no separate WebSocket server to deploy, scale, and monitor.

The trade-off is clear: we sacrifice the richer component ecosystem of React for a simpler, faster-to-develop architecture that still delivers real-time UX. For a domain-specific tool where the interaction patterns are well-defined (editing structured documents, not building a general-purpose design tool), this trade-off is strongly favorable.

Real-Time Collaboration via ActionCable and CableReady

The core of the platform's collaborative experience is built on Rails ActionCable, which provides WebSocket channels that maintain persistent connections between the server and every connected browser.

Here is how a typical real-time interaction flows:

  1. An estimator updates a line item in a bid section.
  2. The Rails controller saves the change to PostgreSQL and broadcasts a CableReady operation to the project's channel.
  3. Every other user subscribed to that project's channel receives the DOM update within milliseconds.
  4. The updated content appears in place -- no page reload, no loading spinner, no conflict resolution dialog.

This pattern extends across the entire data model. When a project manager restructures bid sections, when a subcontractor submits a quote, or when an admin changes access permissions, every affected user sees the change live. The result feels less like a traditional web application and more like a shared workspace.

Multi-Tenant Architecture with acts_as_tenant

Construction firms working on competing bids must never see each other's data. We implemented multi-tenancy using the acts_as_tenant gem, which enforces tenant scoping at the model layer rather than relying on developers to remember to add WHERE organization_id = ? to every query.

This approach provides several guarantees:

  • Automatic query scoping: Every ActiveRecord query is automatically scoped to the current tenant. A developer cannot accidentally write a query that leaks data across organizations.
  • Shared infrastructure, isolated data: All organizations share the same PostgreSQL database and Rails application, keeping operational costs low while maintaining strict data boundaries.
  • Tenant resolution from authentication: The current tenant is determined from the authenticated user's organization membership, set early in the request lifecycle before any data access occurs.

The data model flows naturally from this multi-tenant foundation: Organizations contain Projects, Projects contain Sections, and Sections contain Bids. Each level inherits tenant isolation from the top, and real-time WebSocket channels are scoped to ensure broadcasts never cross tenant boundaries.

The Thin User Pattern for External Bidders

One of the more interesting architectural challenges was supporting external bidders -- subcontractors and vendors who need to submit quotes for specific bid packages without becoming full platform users. We solved this with what we call the "thin user" pattern, built on top of Devise authentication:

  • Minimal registration: External bidders are invited via email to a specific project. They create an account with minimal information -- name, email, password -- and immediately gain scoped access to only the bid packages they have been invited to.
  • Scoped permissions: Thin users can view the specifications relevant to their trade and submit their bid, but they cannot see other bidders' submissions, internal cost estimates, or unrelated project sections.
  • Automatic expiration: Access can be time-limited to the bid window, after which the thin user's permissions are automatically revoked without deleting their submission data.
  • Upgrade path: If a subcontractor becomes a regular collaborator, their thin user account can be promoted to a full user with broader permissions, preserving their history.

This pattern respects the reality of construction bidding: external participants are transient, their access must be tightly controlled, and the friction of onboarding them must be near zero or they will simply email a PDF instead.

The Notion-Like Block Editor

Bid documents are not flat text. They are deeply structured: divisions, sections, subsections, line items, specifications, notes, and attachments. We built a block-based editor inspired by Notion's approach, where each piece of content is a discrete block that can be reordered, nested, and collaboratively edited.

Key capabilities of the block editor include:

  • Drag-and-drop reordering: Sections and line items can be reorganized by dragging, with changes broadcast to all connected users in real time.
  • Nested block hierarchy: Blocks can contain other blocks, mirroring the natural structure of construction specifications (Division > Section > Subsection > Line Item).
  • Rich content types: Beyond text, blocks can contain tables, file attachments, cost breakdowns, and specification references.
  • Inline collaboration: Multiple users can edit different blocks simultaneously. The system uses block-level locking to prevent conflicts -- if two users try to edit the same block, the second user sees a clear indicator that the block is being edited and by whom.

This editor transforms bid assembly from a document-passing exercise into a live workspace where the bid takes shape collaboratively, in real time, with full structural integrity.

Role-Based Access Control

The platform implements four distinct roles, each with carefully scoped permissions:

  • Administrators: Full organizational control -- user management, project creation, billing, and system configuration.
  • Project Managers: Create and manage bid packages, invite team members and external bidders, set deadlines, and review all submissions within their assigned projects.
  • Estimators: Edit bid content, submit cost estimates, and collaborate on specifications within projects they are assigned to.
  • External Bidders (Thin Users): View relevant specifications and submit bids for the specific packages they are invited to, with no visibility into internal pricing or competing submissions.

Permissions are enforced at the controller and channel level, ensuring that WebSocket broadcasts respect role boundaries just as HTTP responses do. An external bidder subscribed to a project channel will only receive updates relevant to their scoped access, even though the broadcast originates from the same server-side event.

Technology Stack

  • Ruby on Rails 7: Application framework with server-rendered HTML and convention-driven development.
  • PostgreSQL: Primary database with robust support for JSON fields (used for block editor content), full-text search, and concurrent access patterns.
  • ActionCable: Rails-native WebSocket framework providing persistent connections for real-time collaboration.
  • CableReady: Server-side DOM manipulation library enabling surgical, targeted updates to connected browsers.
  • Turbo (Hotwire): Turbo Frames for partial page updates, Turbo Streams for CRUD broadcasting.
  • Stimulus: Lightweight JavaScript framework for progressive enhancement of server-rendered HTML.
  • Devise: Authentication framework extended with the thin user pattern for external bidder access.
  • acts_as_tenant: Model-level multi-tenancy ensuring automatic data isolation between organizations.

Architecture Decisions and Trade-Offs

Every architectural decision involves trade-offs. Here are the most significant ones we navigated:

  • Monolith over microservices: A single Rails application handles authentication, real-time collaboration, document management, and tenant isolation. This reduces operational complexity at the cost of scaling flexibility. For the expected user base (dozens of concurrent users per bid room, not thousands), vertical scaling with connection pooling is sufficient.
  • Block-level locking over operational transformation: True collaborative editing (like Google Docs) uses operational transformation or CRDTs to merge concurrent edits to the same content. We chose simpler block-level locking because bid documents have natural structural boundaries -- two estimators rarely need to edit the same line item simultaneously, but they frequently edit different sections of the same document.
  • Server-rendered HTML over client-side state: By keeping the server as the single source of truth for rendered HTML, we eliminated an entire class of state synchronization bugs. The trade-off is slightly higher server load per interaction, but the reduction in client-side complexity more than compensates.
  • PostgreSQL over a real-time database: We chose PostgreSQL over alternatives like Firebase or Supabase because the relational model maps naturally to construction bid hierarchies, and PostgreSQL's maturity provides the reliability that a financial document platform demands.

Current Status and What Comes Next

This platform is currently in active development. The core architecture -- multi-tenant data model, real-time WebSocket infrastructure, authentication with thin users, and the block editor foundation -- is built and functional. Ongoing development is focused on:

  • Bid comparison and analytics: Tools for project managers to compare submissions across bidders, identify outliers, and generate summary reports.
  • Document versioning: Full audit trail of every change to a bid document, with the ability to restore previous versions of individual blocks or entire sections.
  • Notification system: Configurable alerts for deadline reminders, new submissions, and changes to watched sections.
  • Offline resilience: Service worker integration to allow estimators to draft changes offline, with automatic synchronization when connectivity is restored.

The construction industry has been underserved by collaboration tools built for other domains. This platform is purpose-built for how bid teams actually work -- under pressure, across organizational boundaries, with documents that have real financial consequences.

Why This Matters for Construction Firms

The construction industry loses billions annually to bid errors, miscommunication, and coordination failures. A single misplaced decimal in a subcontractor quote can turn a profitable contract into a loss. A missed specification update can invalidate an entire submission.

Real-time collaboration is not a luxury feature for this industry -- it is a risk mitigation strategy. When every stakeholder works from the same live document, when changes propagate instantly, and when access controls ensure the right people see the right information, the entire bidding process becomes more accurate, more efficient, and less prone to the errors that cost firms contracts.

If your organization faces similar challenges with collaborative workflows, document management, or real-time data synchronization, we would welcome the opportunity to discuss how a custom-built solution could address your specific needs. Reach out to our team to start the conversation.

Project Highlights

1. Real-Time Collaboration

ActionCable and CableReady deliver instant DOM updates to all connected users — no polling, no page refreshes.

2. Multi-Tenant Architecture

acts_as_tenant enforces data isolation at the model layer, preventing cross-organization data leaks by design.

3. External Bidder Access

Thin user pattern lets subcontractors submit bids with minimal onboarding and tightly scoped, time-limited permissions.

Key Features

Real-time WebSocket collaboration

Multi-tenant data isolation

Notion-like block editor

Role-based access control

External bidder "thin user" access

Live bid room sessions

Get In Touch

For Fast Service, Email Us:

info@ofashandfire.com

Our Approach

Discovery & Planning

We begin each project with a thorough understanding of client needs and careful planning of the solution architecture.

Implementation

Our experienced team executes the solution using modern technologies and best practices in software development.

Results & Impact

We measure success through tangible outcomes and the positive impact our solutions have on our clients' businesses.

Ready to Ignite Your Digital Transformation?

Let's collaborate to create innovative software solutions that propel your business forward in the digital age.