Early-access service

Managed QR codes for campaigns that keep changing.

Create QR codes once, update destinations later, group codes by campaign, and review scan activity without running your own redirect stack or static links file.

Availability Early access

QR Codes is the first hosted LinkRidge Cloud service moving toward customer trials.

Best for Small teams

Product launches, menus, events, print collateral, and simple campaign tracking.

Setup Reviewed

New workspaces are approved before external redirects, imports, or customer access are enabled.

What it does

One place to manage QR destinations, campaigns, and scan history.

  • Create branded QR codes that can point to new destinations later.
  • Group codes by campaign, location, or customer-facing project.
  • Review basic scan activity before deciding what to optimize.
  • Import existing Open QR links after a human review pass.
Starter

For one small QR workspace

A lightweight plan for launch pages, print tests, and simple campaigns that need editable destinations and a modest scan history.

Growth

For teams with more campaigns

More active codes, longer scan retention, branded exports, and import review for teams moving from an existing QR link library.

Developer path

API and Terraform later

The same account and service model is being prepared for API-driven setup and Terraform management after the hosted service gates are ready.

Next step

Ask for early access

Share the QR workflow you want to move, the number of codes, and whether you have an existing Open QR export to review.

Implementation boundary

Internal service contracts stay documented for builders.

  • Account, user, membership, invite, billing, and entitlement records live in LinkRidge Cloud.
  • QR code domain records, redirects, scan events, and campaign grouping live in the QR service.
  • The seed Open QR app remains separately deployable; platform work should add adapters and contracts instead of copying the full app into this repo.

Workspace record

qr_workspaces

Planned service-owned workspace record created only after an account service is enabled by the platform.

id
Stable workspace identifier used by QR records, redirects, exports, and scan events.
account_id
Platform account boundary; must match the enabled account service before data is loaded.
account_service_id
Platform enablement record that proves the QR service is modeled, requested, enabled, or paused for the account.
service_id
Always qr-codes so shared platform jobs can route usage and audit events.
plan_key
Local plan selection such as starter or growth; billing-provider products and prices are not implied.
status
Workspace status derived from account service state; paused workspaces cannot redirect or mutate records.
created_by_user_id
Platform user or approved operator that caused the workspace to be provisioned.
created_at
Audit-friendly creation timestamp.
updated_at
Last workspace settings or status change timestamp.

Workspace provisioning evidence

  • service_workspace.id is stable and referenced by audit_event.metadata.service_workspace_id.
  • service_workspace.account_id, account_service_id, service_id, and plan_key match the packet account and selected QR plan.
  • service_workspace.created_by_user_id resolves to the local primary owner placeholder.
  • service_workspace.created_at and updated_at remain null while the workspace is planned and no database write has happened.
  • operator_review.decision_state is mirrored into audit_event.metadata.decision_state.

fixture-checked

qr_codes

Planned service-owned QR code record that replaces one links.json slug only after workspace, account service, entitlement, and operator checks exist.

id
Stable QR code identifier used by edit, archive, export, redirect, usage, and audit events.
account_id
Platform account boundary copied from the resolved workspace.
qr_workspace_id
Service workspace that owns the QR code and resolves to one account service.
campaign_id
Optional planned campaign that groups related QR codes inside the same workspace.
slug
Unique redirect slug inside the workspace; global uniqueness is not assumed.
destination_url
Redirect destination that can be changed without changing the printed QR code.
label
Operator/customer label used for dashboard search and export history.
status
Planned, active, archived, or paused state checked before redirecting.
style
QR render style copied from the Open QR seed app options.
created_by_user_id
Platform user or approved operator who prepared or created the QR code.
created_at
Audit-friendly creation timestamp.
updated_at
Last destination, status, style, or label change timestamp.

fixture-checked

qr_scan_events

Planned service-owned scan event evidence that maps one future redirect hit to the shared platform usage event envelope without enabling redirects or billing export.

id
Stable scan event identifier used for fixture checks and future usage-event joins.
account_id
Platform account boundary copied from the resolved workspace and QR code.
account_service_id
Platform service enablement record associated with the scan.
qr_workspace_id
Service workspace that owns the scanned QR code.
qr_code_id
QR code record that resolved the scanned slug.
service_id
Always qr-codes so shared platform jobs can route the usage event.
event_name
Always qr_code.scan_recorded for scan usage evidence.
quantity
Scan quantity that can later feed usage limits after entitlement checks exist.
billable
False while billing export and hosted redirects are not approved.
occurred_at
Null while this is only fixture evidence and no redirect has happened.
metadata
Slug, campaign, referrer, user-agent, coarse geo, entitlement-check, and billing-export context for the usage event.

fixture-checked

qr_billing_export_requests

Planned service-owned billing export request that groups local scan usage for operator review without creating billing customers, subscriptions, invoices, or metered usage writes.

id
Stable request identifier used to connect local scan evidence, operator review, and future billing export audit rows.
account_id
Platform account boundary copied from the scan usage events.
account_service_id
Platform service enablement record associated with the requested export.
service_id
Always qr-codes so shared billing jobs can route the request.
scan_event_ids
Local scan usage events that would be exported only after billing integration approval.
quantity
Total scan quantity represented by the local scan events.
billable
False while billing export remains disabled and no customer subscription exists.
status
Blocked, ready_for_review, exported, or canceled state for the billing export request.
requested_by_user_id
Platform user or approved operator that prepared the request.
requested_at
Null while this is only fixture evidence and no export request has been recorded.
exported_at
Null until a future approved billing exporter writes usage to a billing provider.
metadata
Billing customer, subscription, export destination, approval, and blocked-reason context.

fixture-checked

qr_support_cases

Planned service-owned support and operator handoff evidence tied to QR account-service context before customer-visible support workflows or external ticketing exist.

id
Stable support case identifier used by review UI, audit events, and future support tooling.
account_id
Platform account boundary copied from the account service.
account_service_id
Platform QR service enablement record associated with the case.
qr_workspace_id
Service workspace related to the support or operator handoff case.
service_id
Always qr-codes so shared support workflows can route the case.
target_type
QR service object type under review, such as qr_code or qr_import_job.
target_id
Optional QR service object identifier inside the same account service.
category
Support category such as onboarding, import_review, billing_review, redirect_review, or access_review.
severity
Low, medium, high, or urgent local triage severity.
status
Draft, ready_for_review, blocked, open, resolved, or canceled state.
subject
Short operator-readable support case summary.
created_by_user_id
Platform user or approved operator that prepared the local case.
created_at
Null while this is fixture evidence and no support case has been recorded.
resolved_at
Null until a future support workflow closes the case.
metadata
Approval, blocked-action, customer-visibility, and notification context.

fixture-checked

qr_campaigns

Planned service-owned campaign record for grouping QR codes before customer dashboards, hosted CRUD, scan analytics, or exports exist.

id
Stable campaign identifier used by QR code records, scan metadata, exports, and audit evidence.
account_id
Platform account boundary copied from the resolved workspace.
qr_workspace_id
Service workspace that owns the campaign.
name
Operator/customer label used to group related QR codes.
status
Planned, active, archived, or paused state checked before campaign dashboards or exports are shown.
created_by_user_id
Platform user or approved operator who prepared or created the campaign.
created_at
Audit-friendly creation timestamp.
updated_at
Last campaign settings or status change timestamp.

fixture-checked

qr_audit_events

Planned service-owned audit event evidence that maps QR mutations to the shared platform audit envelope without enabling customer access or external workflows.

id
Stable audit event identifier used for fixture checks and future audit-event joins.
account_id
Platform account boundary copied from the resolved workspace and QR code.
account_service_id
Platform service enablement record associated with the audited QR action.
qr_workspace_id
Service workspace that owns the audited QR code.
qr_code_id
QR code record targeted by the audited action.
service_id
Always qr-codes so shared platform jobs can route the audit event.
action
Normalized QR audit action such as qr_code.created or qr_code.destination_changed.
target_type
Service object type targeted by the audit event.
target_id
Service object id targeted by the audit event.
actor_user_id
Platform user or approved operator responsible for the future audited action.
occurred_at
Null while this is only fixture evidence and no mutation has happened.
metadata
Slug, campaign, prior destination, next destination, skipped external actions, and operator decision context.

fixture-checked

qr_mutation_requests

Planned service-owned mutation request for QR create, destination-change, archive, restore, and export actions before hosted CRUD or external redirects exist.

id
Stable mutation request identifier used to connect operator review, service audit events, and later admin-only execution.
account_id
Platform account boundary copied from the resolved workspace and QR code.
account_service_id
Platform service enablement record associated with the requested mutation.
qr_workspace_id
Service workspace that owns the target QR code.
qr_code_id
QR code record targeted by the requested mutation.
service_id
Always qr-codes so shared platform jobs can route review and audit evidence.
action
Normalized requested action, such as qr_code.destination_change_requested.
requested_by_user_id
Platform user or approved operator that requested the future mutation.
requested_at
Null while this is only fixture evidence and no mutation request has been submitted.
status
Planned, pending_review, approved_local_only, applied, or blocked state for the requested mutation.
entitlement_checked
False until local entitlement reads exist behind admin-only service tooling.
operator_approval_required
True while Matthew approval and local operator review are still required before mutation execution.
external_effect_performed
False so the fixture cannot imply a redirect, DNS, billing, invite, or production route side effect.
metadata
Slug, campaign, prior value, requested value, blocked reason, and planned audit action.

Entitlements

active_qr_codes
limit; default 25. Maximum active, redirectable QR codes for one account service.
monthly_scans
metered-limit; default 5000. Monthly recorded scan events before soft-limit operator review.
scan_retention_days
limit; default 90. Customer-visible analytics retention window.
custom_domains
feature; default false. Whether an account can attach branded redirect domains.
branded_exports
feature; default true. Whether an account can export styled SVG and PNG assets.

adapter-planning

Usage and audit events resolve tenant context first.

QR writes local usage_events and audit_events after account, workspace, entitlement, and route status checks pass.

  • account_id
  • account_service_id
  • service_id
  • qr_workspace_id
  • qr_code_id
  • event_name
  • occurred_at

contract-ready

Hosted QR rollout stays adapter-first.

Next local phase: local_schema_ready.

Seed app boundary confirmed
Open QR stays a static browser app with localStorage and links.json while hosted QR work uses adapter contracts.
Workspace schema planned
qr_workspaces has account, account service, service, plan, status, creator, and timestamp fields.
Local seed records planned
Draft account, owner user, owner membership, account service, entitlement defaults, and activation audit records must exist locally before workspace preparation.
Seed packet contract defined
The local activation packet identifies account, owner, membership, account service, entitlements, QR workspace plan, external-action skips, operator review, and audit fields before any write is allowed.
Workspace provisioning fixture checked
The QR seed packet fixture now proves every manifest-declared qr_workspaces field, creator reference, pending timestamps, and audit metadata linkage before local schema work starts.
QR code record fixture checked
The QR seed packet fixture now proves planned qr_codes rows stay inside the account workspace boundary before hosted CRUD or redirects exist.
Campaign fixture checked
The QR seed packet fixture now proves planned qr_campaigns rows group QR codes inside the account workspace boundary before customer dashboards or exports exist.
Scan event fixture checked
The QR seed packet fixture now proves scan usage evidence resolves through account, account service, workspace, and QR code context before hosted redirects or billing export exist.
Audit event fixture checked
The QR seed packet fixture now proves QR mutation audit evidence resolves through account, account service, workspace, and QR code context before hosted CRUD or customer-visible timelines exist.
Route adapter blocked
Hosted redirects remain blocked until local account, workspace, entitlement, and operator approval checks exist.
Local provisioning rehearsal checked
The QR seed packet fixture now proves a rehearsal-only provisioning run can enumerate local records and blocked external writes without executing account, auth, billing, invite, DNS, redirect, or deploy actions.
Operator decision fixture checked
The QR seed packet fixture now proves the review outcome stays blocked pending Matthew approval, with approved actions empty and every activation-gated action still blocked.
Approval audit fixture checked
The QR seed packet fixture now proves operator decisions leave a platform audit row tied to the decision id, blocked actions, and skipped external action state.
Mutation request fixture checked
The QR seed packet fixture now proves planned destination-change requests stay local, approval-gated, and tied to the account workspace before hosted CRUD exists.
Import job fixture checked
The QR seed packet fixture now proves Open QR links.json or browser-library imports stay local, reviewable, and tied to the account workspace before tenant records or hosted redirects change.
Event adapter planned
QR create, scan, export, destination-change, archive, restore, and domain events map to the shared platform envelope.
External actions closed
Billing writes, invite sends, customer accounts, DNS, production deploys, and public access remain approval-gated.

fixture-backed

Seed packet checks keep QR activation local.

Local QR seed packet fixtures prove draft account, owner, membership, account service, plan-scoped entitlement values, workspace plan, planned campaign records, planned QR code records, route-resolution evidence, planned scan-event evidence, planned QR audit evidence, external-action skips, and audit target context before hosted QR work starts.

Fixture
src/content/platformSeedPackets.json
Check
npm run platform:seed-packets:check

Roles

owner
Can manage the account service, workspace settings, QR records, exports, and future billing review screens.
admin
Can manage QR records, campaigns, scan reporting, and workspace settings, but cannot approve billing or external account changes.
editor
Can create, edit, archive, restore, and export QR codes within an enabled workspace.
viewer
Can review QR codes, campaigns, and scan analytics without changing destinations or exporting assets.
Modeled only

Starter

active_qr_codes
25
monthly_scans
5000
scan_retention_days
90
team_seats
3
Approval-gated

Growth

active_qr_codes
250
monthly_scans
50000
scan_retention_days
365
team_seats
10

Tenant isolation checks

Audit events

  • qr_code.created
  • qr_code.updated
  • qr_code.archived
  • qr_code.restored
  • qr_code.destination_changed
  • qr_domain.configured