Cybokron Backlink Checker is a modular PHP platform for backlink auditing at team scale. It includes asynchronous scans, RBAC, API access, scheduling, alerts, export pipelines, and 10-language localization (including Turkish).
- Renamed product branding to Cybokron Backlink Checker across defaults, localization catalogs, architecture docs, and notification subjects.
- Updated updater test fixtures to the renamed GitHub repository:
https://github.com/ercanatay/cybokron-backlink-checker. - Aligned package metadata and default crawler user-agent with the new brand identity.
- Re-ran local regression suite (
php tests/run.php) with 47/47 passing tests on PHP 8.4.11.
- This is a branding and repository-rename release; core scan/updater behavior is unchanged.
- Modular architecture with clear domain/service/controller separation
- Legacy-compatible
/index.phpentrypoint shim - SQLite persistence with versioned migrations
- Queue-based scan execution with retries and dead-letter behavior
- Team RBAC (
admin,editor,viewer) - CSRF protection, hardened sessions, API token scopes, rate limiting
- Moz provider adapter with cache TTL and health metadata
- Backlink extraction with robust URL normalization and host-equivalent matching
- Robots noindex detection from meta and
X-Robots-Tag - Multi-link capture per result and link relation classification
- Historical trend comparison against previous completed scan
- Saved result views and advanced filtering/sorting
- Scheduled scans using supported RRULE patterns
- Alert channels: Email, Slack, signed webhook
- Webhook delivery logging and retry via worker queue
- Export formats: CSV, TSV/TXT, XLSX, JSON
- Opt-in telemetry and configurable retention cleanup
- i18n catalogs with fallback and RTL support for Arabic
- Balanced CI quality gates with lint + automated tests
- Modular app architecture
- Composer autoloading (PSR-4)
.envconfiguration- Startup configuration validation
- Local authentication
- Team RBAC
- CSRF enforcement
- Scoped API tokens
- Login/API rate limiting
- Security headers + cookie hardening
- Structured error payloads
- Structured JSON logging + correlation IDs
- Audit logs
- SQLite migrations
- Legacy compatibility shim
- Background queue
- Retry/backoff + dead jobs
- Concurrency chunk controls
- URL normalization (IDN-aware)
- Host-equivalent backlink matching
- Robots directive analysis
- Absolute URL resolution
- Link type classification (
dofollow/nofollow/ugc/sponsored) - Multi-link capture
- Redirect chain + final status capture
- Moz-first provider abstraction
- Provider cache TTL
- Scan trend reporting
- Advanced result filtering/sorting + saved views
- CSV/TSV/XLSX/JSON exports
- Team project/workspace model
- Recurring schedules
- Email/Slack/webhook alerts
- Webhook delivery logs
- REST API v1
- Telemetry opt-in
- Retention cleanup policy
- 10-language localization + fallback
- Arabic RTL support
- Accessibility and keyboard-first UX affordances
en-US(default)tr-TRes-ESfr-FRde-DEit-ITpt-BRnl-NLru-RUar-SA(RTL)
Catalog format: resources/lang/{locale}.json with _meta (version, lastReviewed, rtl).
- PHP 8.2+
- SQLite (PDO)
- cURL + DOM + intl
- Optional Docker (Nginx + PHP-FPM + worker + scheduler)
bootstrap/ # app bootstrap + autoload fallback
src/
Controllers/ # WebController, ApiController
Database/ # PDO wrapper + Migrator
Domain/ # enums + URL/link domain logic
Http/ # request/response/router/session/rate limiter
I18n/ # translator + locale detection
Providers/ # metrics provider adapters (Moz)
Security/ # CSRF/token/password services
Services/ # scan queue/export/schedule/notification logic
templates/ # server-rendered UI
resources/lang/ # 10 locale catalogs
migrations/ # SQL schema
bin/ # operational CLI commands
docs/ # deep technical docs
public/index.php # web root entrypoint
index.php # legacy compatibility shim
- Copy environment file:
cp .env.example .env- Edit
.env:
APP_KEYBOOTSTRAP_ADMIN_EMAILBOOTSTRAP_ADMIN_PASSWORDMOZ_ACCESS_IDMOZ_SECRET_KEY- webhook/slack settings if used
- Run migrations:
php bin/migrate.php- Start local web server:
php -S 127.0.0.1:8080 -t .- Open:
http://127.0.0.1:8080/index.php
- Start background processes (separate terminals):
php bin/worker.php
php bin/scheduler.phpcp .env.example .env
# configure .env
docker compose up --build -dApplication URL: http://localhost:8080
Services:
web(Nginx)app(PHP-FPM)worker(queue consumer)scheduler(recurring scan trigger)
- Upload all files.
- Point document root to
public/. - Ensure PHP extensions:
pdo_sqlite,curl,dom,intl. - Create
.envfrom.env.example. - Run
php bin/migrate.phponce. - Add cron jobs:
* * * * * php /path/to/bin/scheduler.php
* * * * * php /path/to/bin/worker.php 20
0 3 * * * php /path/to/bin/cleanup.php- Bootstraps first admin from
.envif no users exist. - Roles:
admin: full controleditor: scan + schedule + notification managementviewer: read-only project/scan access
Base: /api/v1
POST /auth/loginPOST /projectsPOST /scansGET /scans/{scanId}GET /scans/{scanId}/resultsPOST /scans/{scanId}/cancelPOST /schedulesGET /exports/{exportId}POST /webhooks/test
See full details in /docs/API.md.
- Scan creation enqueues
scan.runjobs. - Worker processes scans, webhook delivery, and updater jobs (
updater.check,updater.apply). - Scheduler creates scans from due schedule rules and enqueues hourly updater checks.
- Cleanup task purges old operational data based on retention.
Commands:
php bin/worker.php
php bin/scheduler.php
php bin/cleanup.php
php bin/updater.php status
php bin/updater.php check
php bin/updater.php apply- Release source: GitHub stable releases/tags (pre-release and draft are ignored).
- Apply mode: admin-triggered update apply; periodic checks are automatic.
- Apply pipeline:
git pull --ff-only->php bin/migrate.php->composer installonly whencomposer.lockchanges. - Safety controls:
- updater lock file (
storage/updater/update.lock) - dirty repository guard (apply is blocked)
- SQLite backup before apply (
storage/updater/backups) - rollback to previous commit + DB backup restore on failure
- updater lock file (
- Dashboard controls:
POST /settings/updater/checkPOST /settings/updater/apply
Per-scan exports are generated on demand and persisted in storage/exports:
- CSV
- TSV/TXT
- XLSX
- JSON
- Session hardening (
HttpOnly,SameSite, configurable secure cookie) - CSRF tokens for state-changing forms
- API scopes + token hashing (
sha256) - Rate limiting in SQLite for login/API paths
- Strict security headers and CSP
- Audit logging for sensitive actions
- JSON logs:
storage/logs/app.log - Correlation ID included in response headers and log contexts
- Optional telemetry (
TELEMETRY_ENABLEDor settings toggle)
Run locally:
php tools/lint.php
php tests/run.phpCI pipeline:
.github/workflows/ci.yml- Lint + automated tests on push/pull request
APP_ENV,APP_DEBUG,APP_URL,APP_KEYDB_PATHSESSION_*,COOKIE_*,SECURITY_FORCE_HTTPSRATE_LIMIT_LOGIN_PER_15_MIN,RATE_LIMIT_API_PER_MINMOZ_ACCESS_ID,MOZ_SECRET_KEY,MOZ_API_ENDPOINTSCAN_*,QUEUE_*RETENTION_DAYSWEBHOOK_SIGNING_SECRET,SLACK_WEBHOOK_URL,SMTP_FROMTELEMETRY_ENABLEDBOOTSTRAP_ADMIN_*
/index.phpremains available and now boots the modular app.- Results are persisted in SQLite instead of session-only storage.
- Scans run asynchronously through queue workers.
- UI and API now require authenticated access.
See /docs/MIGRATION.md.
- Verify
BOOTSTRAP_ADMIN_EMAILandBOOTSTRAP_ADMIN_PASSWORDin.env. - Ensure database is writable (
data/).
- Worker is not running. Start
php bin/worker.php.
- Scheduler is not running. Start
php bin/scheduler.phpor cron equivalent.
- Check
MOZ_ACCESS_IDandMOZ_SECRET_KEY. - Inspect
storage/logs/app.logfor upstream errors.
- Ensure
storage/exportsis writable.
I’m Ercan Atay, a software engineer building practical, open-source tools that help people work faster and smarter. My focus is on web technologies, automation, and developer productivity.
Your sponsorship helps me maintain and improve projects like Backlink Checker, add new features, fix issues quickly, and keep everything accessible to the community.
If my work saves you time or supports your business, your support will directly fuel more reliable releases, better documentation, and long-term open-source sustainability. Thank you for being part of this journey.
- GitHub Sponsors:
https://github.com/sponsors/ercanatay - Buy Me a Coffee:
https://buymeacoffee.com/ercanatay
MIT. See LICENSE.