π Midshift β Technical Due Diligence
π Midshift β Technical Due Diligence
π Confidential. This assessment describes unpatched security weaknesses in a live product and evaluates proprietary code. Keep this repository private and share it only with people who are party to the transaction.
A structured technical due diligence of Midshift, a campaign-production platform for retail marketing teams and their agencies (Next.js Β· React Β· TypeScript Β· Supabase Β· Vercel). It was carried out on 2026-10-07 against the source supplied for audit (single commit 3789df6, 2026-10-06), for a party considering acquiring, investing in or taking over maintenance of the software.
Key
| Rating | Severity | Status |
|---|---|---|
| π’ Green β 4 to 5 | π΄ Critical | β Yes |
| π‘ Amber β 3 | π High | β No |
| π΄ Red β 1 to 2 | π‘ Medium | β Partial |
| βββββ β score out of 5 | βͺ Low |
βοΈ Verdict
π΄ βββββ Overall: 2 / 5 β Red as delivered; 3 / 5 Amber once two small Critical fixes are deployed and verified.
A well-conceived, carefully engineered product with distinctive, well-tested domain logic, held back by two cheap-to-fix but Critical security exposures and by a bus factor of one. Read the executive summary first.
π© Top risks
| Risk | Severity | |
|---|---|---|
| 1 | Any signed-in user can make themselves an administrator (database permission rule) | π΄ Critical |
| 2 | Web framework pinned to a release with published critical vulnerabilities | π΄ Critical |
| 3 | Code, operations and IP concentrated in one person; history squashed | π΄ Critical |
| 4 | Sign-off integrity can be undermined from inside a job | π High |
| 5 | Riskiest code is the least tested; failures are invisible | π High |
π Strengths worth paying for
- Distinctive, well-tested domain IP β copy-deck parser, filename matcher, single tracking-link builder
- Engineering discipline turned into automation β strict types, clean lint, bespoke guard-rail tests
- Exceptional written rationale behind decisions
- Clean, low-cost stack and licensing; only three runtime vendors
- One database per client β strong data isolation by design
π Scorecard
| # | Report | Rating | RAG |
|---|---|---|---|
| 01 | Product & Domain Overview | βββββ 4 / 5 | π’ Green |
| 02 | Technology Stack & Codebase Complexity | βββββ 3 / 5 | π‘ Amber |
| 03 | Architecture & Design | βββββ 3 / 5 | π‘ Amber |
| 04 | Domain Model & Business Rules | βββββ 3 / 5 | π‘ Amber |
| 05 | Code Quality & Standards | βββββ 4 / 5 | π’ Green |
| 06 | Technical Debt & Maintainability | βββββ 3 / 5 | π‘ Amber |
| 07 | Testing & QA | βββββ 3 / 5 | π‘ Amber |
| 08 | Dependencies & Licensing | βββββ 2 / 5 | π΄ Red |
| 09 | Security & DevSecOps | βββββ 2 / 5 | π΄ Red |
| 10 | Source Control, CI/CD & Development Practices | βββββ 3 / 5 | π‘ Amber |
| 11 | Delivery Metrics & Key-Person Risk | βββββ 1 / 5 | π΄ Red |
| 12 | Documentation Review | βββββ 3 / 5 | π‘ Amber |
| 13 | Integrations | βββββ 3 / 5 | π‘ Amber |
| 14 | Executive Summary & Overall Assessment | βββββ 2 / 5 | π΄ Red |
The index lists each report's top risk.
π How to read the reports
Every report follows the same structure: π Summary (plain English) Β· π― Rating Β· π Findings Β· π§Ύ Evidence Β· β οΈ Risks Β· β Recommendations.
Every finding carries an evidence tag:
[Observed]β verified directly, citing the file and line or the command run and its output[Inferred]β a reasoned conclusion from indirect evidence, with the reasoning shown[Unavailable]β could not be assessed from the repository; the access needed is stated
Metrics are measured, never estimated. Where something could not be measured, the report says so and names the data needed. The executive summary consolidates every [Unavailable] item into a list of follow-up questions and access requests for the vendor.
π§ͺ Method
Measured with cloc, lizard (cyclomatic complexity), jscpd (duplication), Vitest with V8 coverage, Playwright, npm audit, license-checker and gitleaks, alongside a manual review of the code, schema, migrations and documentation. Ratings use a 1β5 scale: 5 Excellent Β· 4 Good Β· 3 Adequate Β· 2 Poor Β· 1 Critical.
Limits: the source was supplied as a single squashed commit, so history-based analysis (churn hotspots, contributors, delivery metrics) was not possible, and no live deployment, database or hosting account was accessed.