← Back to featured work

Technical case study

TikTok Browser Automation System — Technical Case Study

Delivered for a private client and later published publicly with permission. This case study examines only architecture and engineering evidence visible in the public repository; it does not disclose the client or provide guidance for bypassing platform safeguards.

ReactNode.jsExpressSQLiteBullRedisPlaywright
High-level architecture cover for the TikTok Browser Automation System

Project at a glance

Provenance

Private-client delivery, published publicly with permission

Interface

React 18, Vite, Tailwind CSS and React Router

Backend

Node.js, Express and SQLite through better-sqlite3

Orchestration

Bull queues backed by Redis

Browser boundary

Playwright running in a separate worker package

Evidence basis

Public source tree, package manifests and README

What the public repository shows

The repository is split into frontend, backend, and bot packages. Their manifests and source establish a React dashboard, an Express API, SQLite persistence, Redis-backed Bull queues, and a Node.js worker using Playwright. That evidence corrects the old site card, which inaccurately described the linked project as a Python/OpenAI/FastAPI workflow.

The README describes dashboard-driven batch management, progress visibility and CSV export. Those are documented capabilities, not independently measured production outcomes. PostgreSQL and a broader REST API are listed as future improvements in the README, so this case study does not present them as implemented.

Architecture walkthrough

The dashboard initiates and observes work through the Express layer. The backend owns validation, authentication routes, persisted batch/job state, and queue submission. Bull and Redis decouple API requests from longer-running work, while the worker owns the Playwright browser boundary and its supporting service adapters.

Current public architecture and separately labeled recommended hardening

Request and job flow

  1. 1An authenticated dashboard request reaches an Express route and controller.
  2. 2The backend validates the request and creates the corresponding SQLite records.
  3. 3The backend submits work to a Bull queue whose state is coordinated through Redis.
  4. 4A separate Node.js worker consumes the queued job and enters the Playwright boundary.
  5. 5Persisted job and batch state gives the dashboard a boundary for progress reporting.

This flow intentionally stops at the browser-control boundary and omits operational details that could facilitate safeguard evasion or unauthorized account activity.

API and state boundaries

The backend source defines separate auth, batch and account route modules, a shared error handler, SQLite-backed records, and a health endpoint. That is evidence of a conventional API boundary and explicit state ownership. It does not, by itself, prove production load, availability, data durability, or security review.

Queue and worker orchestration

Bull and Redis separate request acceptance from browser work. The queue configuration in the public backend includes retry/backoff behavior and retention limits, while the bot package contains the worker entry point. This separation is useful architecture evidence, but repository inspection is not a substitute for observing jobs under production failure and concurrency conditions.

Browser automation boundary

Playwright and its worker-side dependencies are declared in the bot package, and the source tree contains a dedicated automation module. This case study treats that as a system boundary: it confirms browser control exists without reproducing workflows for defeating anti-abuse checks, identity verification, account limits, or detection.

Supporting external integrations

The public documentation and package structure show dependencies on proxy, mailbox, and CAPTCHA services. Architecturally, these should remain replaceable adapters with timeouts, typed failures, auditability and tightly controlled configuration. Provider setup and evasion-oriented implementation details are deliberately excluded here.

Evidence-supported code excerpts

These small excerpts illustrate safe architectural boundaries from the public source; they are not instructions for operating the automation workflow.

Express health and routes

backend/src/server.js

app.get('/health', (req, res) => {
  res.json({
    success: true,
    message: 'TikTok Automation API is running',
    timestamp: new Date().toISOString(),
  });
});

app.use('/api/auth', authRoutes);
app.use('/api/batches', batchRoutes);
app.use('/api/accounts', accountRoutes);
app.use(errorHandler);

Queue policy boundary

backend/src/config/queue.js

export const accountQueue = new Queue('account-creation', REDIS_URL, {
  defaultJobOptions: {
    attempts: 3,
    backoff: {
      type: 'exponential',
      delay: 60000,
    },
    removeOnComplete: 100,
    removeOnFail: 200,
  },
});

Source: public backend files in the linked repository, inspected August 28, 2026.

Failure boundaries

Request boundary

Validation and the shared error handler contain API-level failures.

Queue boundary

Redis availability and queue submission can fail independently of HTTP handling.

Worker boundary

A worker or browser session can fail after a request has already been accepted.

Integration boundary

External dependencies add timeouts, rate limits and provider-specific errors.

Persistence boundary

SQLite stores local state, but deployment, backup and recovery guarantees are not evidenced.

Recovery boundary

Retry configuration exists; end-to-end idempotency and reconciliation are not proven.

What the public evidence proves

EvidenceDemonstratesDoes not prove
Frontend manifest and sourceReact 18, Vite, routing and a dashboard UIUsability research, accessibility audit or production adoption
Backend manifest and sourceExpress routes, SQLite access, auth dependencies and error handlingSecurity certification, uptime or production scale
Bull/Redis configurationAsynchronous queue and retry/backoff configurationExactly-once processing or recovery under every failure mode
Bot manifest and worker sourceA Node.js worker with a Playwright browser boundaryPlatform authorization or safeguard compliance
Public GitHub repositoryInspectable source and four visible commits at review timePrivate-client identity, business impact or complete delivery history
One visible fork at review timeAt least one GitHub user forked the public repositoryUsage, endorsement, reliability or measurable outcomes

Security and repository-hygiene observations

The manifests declare bcrypt and JSON Web Token dependencies, but dependency presence is not evidence of a complete authentication or authorization review. The public tree also includes artifact categories that deserve deliberate review before portfolio use.

Public repositories should be reviewed for accidentally committed environment files, databases, generated dependencies, logs, screenshots, or other sensitive artifacts before being used as portfolio evidence.

This observation identifies a review boundary, not a claim that a particular secret or client record was exposed. No private-client data was inspected or reproduced for this case study.

What I would harden next

  • Move all secrets to managed configuration and prevent generated artifacts from entering version control.
  • Add explicit authorization policies, audit trails, rate limits and a documented platform-compliance review.
  • Make jobs idempotent and define reconciliation, dead-letter and operator-recovery workflows.
  • Add structured logs, metrics, traces and correlation IDs across API, queue and worker boundaries.
  • Build API integration, queue failure, worker contract and browser-boundary tests in CI.
  • Define data-retention, deletion, backup and restore policies for persisted job state.

These are recommendations, not claims about the current public implementation.

What this project demonstrates

The evidence supports a full-stack browser-automation architecture with clear UI, API, persistence, queue and worker boundaries. It also demonstrates the value of separating long-running work from HTTP requests and representing progress as stored state. The public evidence does not support invented client metrics, performance claims, revenue impact, volume, time savings or a claim of universal reliability.

Review the evidence

Explore the public repository for the implementation evidence, or return to the featured-work section to review other projects.