Neeto is the proof of our Ruby on Rails expertise.

Neeto is a collection of 20 SaaS products that we’ve built and continue to maintain using Ruby on Rails.

Building and running these products means solving real engineering problems involving performance, concurrency, security, payments, integrations, and infrastructure.

When you hire BigBinary, you work with the same engineers who build and maintain Neeto.

Neeto in numbers

Real products. Real customers. Real scale.

0M+Bookings on NeetoCal
0K+Screen recordings
0K+Payment transactions
$0.0M+Payments collected
Only Rails

Building Neeto makes us better Rails engineers.

For over 15 years, BigBinary has focused on Ruby on Rails. We’ve built and continue to maintain Neeto, a collection of more than 20 SaaS products that have processed over a million bookings, hundreds of thousands of recordings, and millions of dollars in payments.

Building these products is only part of the work. Keeping them secure, fast, reliable, and up to date is an ongoing responsibility. Everything we learn from Neeto makes us better at building and maintaining Rails applications for our clients.

Beyond writing code

Our engineers don’t stop when a feature is deployed. They investigate production failures, optimize slow queries, manage background jobs, handle infrastructure issues, and keep applications running as traffic grows. That’s the experience they bring to client projects.

Deep in Rails internals

PostgreSQL constraints, background jobs, Action Cable, Rails engines, safe migrations. Our engineers work at the level where Rails meets the database and infrastructure. They understand how these components behave together, especially when applications grow.

Proven in production

Our engineering practices are shaped by building and maintaining more than 20 SaaS products. We know which approaches work because we’ve used them to solve real problems involving performance, concurrency, security, and reliability.

The Neeto platform

One Rails platform. 20+ products.

Building twenty SaaS products independently would mean solving the same problems repeatedly: payments, authentication, integrations, notifications, permissions, and more.

Instead, we’ve built a shared platform using Ruby on Rails engines. Common functionality is developed once and reused across Neeto products. This allows us to ship features faster, fix bugs in one place, and keep our applications consistent without maintaining twenty separate implementations.

Shared Rails engines

We have built 28 reusable Rails engines covering payments, webhooks, integrations, access control, notifications, and more. When we fix a bug or improve functionality in one engine, every Neeto product using that engine benefits from the change.

Keeping Rails current

NeetoCal runs on Rails 8.1 and Ruby 4.0. Maintaining more than twenty products means we regularly upgrade Rails, Ruby, and their dependencies. Our engineers gain firsthand experience handling compatibility issues, deprecated APIs, and the challenges of upgrading real production applications.

Our own tools, built in Rails

We don’t just build customer-facing SaaS products. We’ve also built the tools needed to develop and operate them. NeetoDeploy handles deployments, NeetoCI runs tests, NeetoBugWatch tracks errors, and NeetoPlaydash helps us investigate browser test failures. These tools are built and maintained by our engineers.

Inside NeetoCal’s Gemfile

35 Neeto gems, including 28 Rails engines

paymentsintegrationswebhooksaccess-controlactivitiesapi-keyscrmcustom-domainsdata-opseditoremail-deliveryfiltersformnotificationsrulesseoslackteam-membersthemeswhatsapp…and more

Built on this platform: NeetoCal, NeetoDesk, NeetoForm, NeetoRecord, NeetoChat, NeetoInvoice, NeetoKB, NeetoCRM, NeetoSite, NeetoSign, NeetoCourse, NeetoQuiz, NeetoPlanner, NeetoEngage, and more.

Hard problems, solved

Problems that show how our engineers think.

Every detail below comes from Neeto's production code.

Concurrency

Two people, one slot. Only one booking.

With over a million bookings processed, NeetoCal must handle situations where two visitors attempt to book the same time slot simultaneously. Both requests might pass application-level validations, but only one should succeed. The situation becomes even more complicated when payments are involved.

  • The database has the final say. We use PostgreSQL exclusion constraints to prevent overlapping bookings at the database level. Even if two requests pass the Rails validations simultaneously, the database ensures that conflicting bookings cannot both be saved.
  • Deadlocks, handled gracefully. Concurrent database operations can sometimes result in deadlocks. NeetoCal handles these failures and informs the visitor that the selected slot is no longer available, rather than displaying an unexpected error.
  • Payments without double bookings. If a customer completes a payment but loses the race for the booking, we give them 10 hours to select another time slot. If they don’t, we automatically issue a refund. The refund process is idempotent, preventing duplicate refunds if a job is retried.
  • Row-level locking where it matters. We use database row locks to protect shared resources such as group booking capacity, discount-code usage limits, and saved-card payment operations. This prevents concurrent requests from exceeding limits or processing conflicting operations.

What you getEngineers who understand concurrency and know when correctness must be enforced at the database level. These principles apply beyond scheduling to inventory management, ticketing, payments, and any application where multiple users compete for limited resources.

db/schema.rbbookings
exclusion_constraint
  "user_id WITH =,
   is_overridden WITH =,
   tsrange(starts_at, ends_at) WITH &&",
  using: :gist,
  name: "booking_slot_should_not_overlap"

The rule lives in Postgres, so it holds everywhere.

Performance

Availability in real time, 40× fewer checks.

Finding an available meeting slot sounds simple until you account for working hours, holidays, scheduling overrides, buffer times, booking limits, group capacity, and existing meetings across Google Calendar, Outlook, and iCloud.

For round-robin and collective meetings, these calculations must account for multiple team members, each with their own availability and scheduling constraints.

  • A sophisticated scheduling engine. NeetoCal’s scheduling engine contains approximately 5,000 lines of Ruby code and 560 tests. It handles one-on-one, round-robin, collective, and group meetings, each with its own scheduling rules and edge cases.
  • Binary search instead of linear scans. We replaced expensive linear searches with binary search over sorted booking times. We also reduced repeated time zone conversions by using integer-based calculations where possible.
  • Finding availability without brute force. Instead of generating every possible meeting slot for the next 18 months, we estimate daily availability using a single grouped SQL query. This significantly reduces unnecessary computation when searching for the first available date.
  • Caching without duplicate work. We cache availability results in Redis and use unique background jobs to prevent multiple workers from performing the same expensive calculations during traffic spikes.

What you getEngineers who understand algorithms, database performance, and caching well enough to identify the real bottleneck and fix it. We focus on making applications faster through better engineering, not simply adding more servers.

Media pipeline

380K recordings, ready the moment you stop.

People paste the link the second they press stop. Videos run for hours and arrive from Chrome, Firefox, Safari, extensions and a desktop app, each in a different format.

  • Rails never touches the video bytes. It coordinates a direct S3 multipart upload, so app servers stay light.
  • Crash-proof. If a laptop dies mid-recording, NeetoRecord finishes the video from the parts that reached S3.
  • The right path per browser. Chrome's video is repackaged without re-encoding; Firefox's is encoded once; Safari has its own path.
  • Smart editing. A trim re-encodes only the affected 8-second segments, with one-click revert.
  • Serverless where it fits. AWS Lambda handles transcoding and AI; recordings over 45 minutes move to our own compute cluster.

What you getEngineers who have built media pipelines that are fast for users and careful with cloud costs.

RecordingVideo chunks stream directly to S3Video chunks upload directly to Amazon S3 using presigned multipart uploads and S3 Transfer Acceleration, without passing through Rails servers.
After 20 secondsAI generates the video titleAI starts generating a title while recording is still in progress, so the title is ready for link previews when the recording ends.
When recording stopsVideo processing beginsUploaded chunks are assembled, and AWS Lambda remuxes or encodes the recording into a streaming-ready MP4.
In parallelAI and media processingWe generate transcripts, summaries, chapters, thumbnails, GIF previews, and hover sprites through parallel background processing.
Every 2 hoursAutomatic recovery checksA scheduled process identifies recordings that haven’t finished processing and retries them automatically, helping recover from interrupted uploads or processing failures.

Resilience

Integrations that survive the provider’s bad days.

A single NeetoCal booking can involve Google Calendar, Outlook, or iCloud, along with video providers such as Zoom, Google Meet, Microsoft Teams, Daily, and Whereby.

Each provider has its own APIs, rate limits, and failure scenarios. When something goes wrong, we need to ensure that bookings remain accurate and customers aren’t left without a meeting link.

  • Two-way calendar sync. When a host moves a meeting in Google Calendar or Outlook, NeetoCal automatically reschedules the corresponding booking.
  • Failure handling, designed up front. We define how each integration handles errors, including when to retry, when to ask the user to reconnect, and when an error can safely be ignored.
  • A meeting link, even when providers fail. If the host’s video provider is unavailable, NeetoCal falls back to our self-hosted Jitsi server so the meeting can still take place.
  • Race conditions, handled. We create meeting rooms only after the database transaction commits. This prevents background jobs from attempting to access booking records that haven’t been fully saved.

What you getEngineers who anticipate integration failures and build recovery mechanisms into the system, so your customers can continue working even when third-party services experience problems.

Google CalendarWe use push notifications and sync tokens to keep calendars up to date. Channel renewals are spread over 30 minutes to avoid hitting API rate limits, with automatic full resyncs when incremental synchronization is no longer possible.
Microsoft OutlookWe use Microsoft Graph subscriptions to detect calendar changes, renewing them every two hours. Delta synchronization keeps events up to date, while a daily full resync helps recover from missed notifications or synchronization failures.
Apple iCloudSince iCloud doesn’t support push notifications for our calendar integration, we poll for changes every five minutes. Polling intervals are staggered to avoid unnecessary traffic, and we synchronize only calendars that have changed.
Video conferencingWe prioritize the host’s selected video provider, whether that’s Zoom, Google Meet, or Microsoft Teams. If the provider fails, NeetoCal falls back to our self-hosted Jitsi server so the meeting can still take place.
NeetoDeploy

Our engineers built their own Heroku.

Running more than twenty SaaS products requires reliable deployments, infrastructure management, monitoring, and cost control.

Rather than relying entirely on a third-party platform, we built NeetoDeploy, our own platform-as-a-service.

Ruby on Rails serves as the control plane, while Kubernetes manages the underlying infrastructure. Our engineers built everything from automated deployments and review applications to autoscaling, database management, and infrastructure cost reporting.

This is the same team that works on our clients’ Rails applications.

0Service objects in the Rails control plane
0Background job classes
0Test files
0+Buildpacks written in-house
PushGitHub webhookRails picks up the commit and starts a build
BuildBuildpacksWarm ARM and x86 build nodes
TestNeetoCIKubernetes shards share one Redis test queue
ReleaseKubernetesRelease jobs, then traffic via Traefik
RunScale and watchLatency-based autoscaling, logs, costs

Kubernetes on AWS

Amazon EKS with Karpenter provisioning ARM (Graviton) nodes. Rails drives the cluster through kubeclient and four companion services.

A review app for every PR

Each pull request gets its own app, URL and TLS certificate. New pushes cancel stale builds; closed PRs clean up automatically.

Apps that sleep and wake

Idle apps scale to zero. The next visitor sees a wake screen while the web and database pods come back up.

Autoscaling on real signals

Scale on Sidekiq queue latency, response time or a schedule. A custom controller reports every scaling event back to Rails.

Managed add-ons

Postgres 14 to 18, Redis and Elasticsearch, with scheduled backups, one-click clones, import, export and memory alerts.

Logs, TLS, cost control

Logs in ClickHouse, automatic Let's Encrypt certificates, and daily AWS cost reports per app.

What you getEngineers who know the whole stack, from the Rails model to the Kubernetes node. They can scale your app, cut your hosting bill or move you off Heroku/Render.

Engineering discipline

Habits forged and hardened by running Neeto.

157 unique indexes · 212 foreign keys

The database enforces the rules

Application-level validations aren’t always enough, especially when multiple requests run concurrently. We use database constraints, unique indexes, and foreign keys to protect data integrity, even when application code misses something.

784 migrations

Safe migrations, always

Database migrations can be risky when an application is serving customers. We use automated checks to catch unsafe migrations before they reach production. Large data backfills run separately so deployments aren’t blocked by long-running operations.

~8,500 tests · 487 Playwright specs

Tested at every level

We test everything from individual methods to complete user workflows. Our unit, integration, and browser tests run in parallel on our own CI infrastructure. We deliberately test tricky scenarios involving time zones, concurrency, and race conditions.

Fix it. Test it. Keep it fixed.

Every bug gets tests

When a bug makes it to production, fixing the code is only half the job. We add regression tests that reproduce the original problem and verify the fix, helping prevent the same bug from returning in a future release.

Flipper feature flags

Staged rollouts

Not every feature needs to reach every customer at once. We use feature flags to roll out changes gradually, observe their impact, and turn off problematic features without requiring another deployment.

Rails 8.1 · Ruby 4.0

Always current

We keep Neeto applications on current versions of Ruby and Rails rather than letting upgrades accumulate. Regular upgrades help us adopt new framework features, stay within supported security releases, and avoid large, disruptive migrations later.

Work with us

Work with the engineers who built Neeto.

From scaling Rails applications and integrating AI to processing payments, building video pipelines, and managing cloud infrastructure, we’ve solved these problems while building and running Neeto.

We bring that same experience and engineering discipline to your Ruby on Rails application.