From 25ab1c485b1fea175a2932202ab9ad8ee8926b06 Mon Sep 17 00:00:00 2001 From: ScreenTinker Date: Tue, 28 Apr 2026 20:54:32 -0500 Subject: [PATCH] SEO: add meta tags, sitemap, robots.txt, comparison pages, guides, internal linking Landing page (frontend/landing.html): - Title now includes "Self-Hosted" for that keyword - Description appended "MIT licensed." - Keywords aligned to spec (digital signage raspberry pi, digital signage android tv, video wall software, kiosk software, etc.) - SoftwareApplication JSON-LD: added applicationSubCategory "DigitalSignage", license URL, refreshed description - Image alt text + og:image:alt + twitter:image:alt now include "open-source digital signage" - New Resources section above the CTA with 6 cards linking to all new guides and comparison pages - Footer rewritten as a 5-column grid (Brand / Guides / Compare / Project / Legal) with the new internal links New SEO pages, all dark-themed, mobile-responsive, ASCII-only: - frontend/css/seo-page.css (shared nav/footer/article/table styles) - frontend/compare/yodeck-alternative.html - frontend/compare/screencloud-alternative.html - frontend/compare/optisigns-alternative.html - frontend/guides/raspberry-pi-digital-signage.html - frontend/guides/digital-signage-android-tv.html - frontend/guides/self-hosted-digital-signage.html Each new page has unique title/description/canonical, OG and Twitter card tags, BreadcrumbList JSON-LD, single h1, proper h2/h3 nesting, visible breadcrumb, comparison table or step-by-step ordered list, "Related guides" cross-link block, and a CTA. Sitemap (frontend/sitemap.xml): added all 6 new URLs with appropriate priority (0.8 for compare pages, 0.9 for guides). Existing landing (1.0) and legal pages preserved. Robots (frontend/robots.txt): allow /compare/ and /guides/, disallow /player (was previously allowed by mistake). Server (server/server.js): added explicit GET /sitemap.xml and GET /robots.txt routes ahead of the static middleware so the Content-Type is guaranteed. Co-Authored-By: Claude Opus 4.7 (1M context) --- frontend/compare/optisigns-alternative.html | 154 ++++++++++++++ frontend/compare/screencloud-alternative.html | 155 ++++++++++++++ frontend/compare/yodeck-alternative.html | 151 ++++++++++++++ frontend/css/seo-page.css | 87 ++++++++ .../guides/digital-signage-android-tv.html | 157 ++++++++++++++ .../guides/raspberry-pi-digital-signage.html | 167 +++++++++++++++ .../guides/self-hosted-digital-signage.html | 196 ++++++++++++++++++ frontend/landing.html | 108 ++++++++-- frontend/robots.txt | 4 +- frontend/sitemap.xml | 30 +++ server/server.js | 13 ++ 11 files changed, 1203 insertions(+), 19 deletions(-) create mode 100644 frontend/compare/optisigns-alternative.html create mode 100644 frontend/compare/screencloud-alternative.html create mode 100644 frontend/compare/yodeck-alternative.html create mode 100644 frontend/css/seo-page.css create mode 100644 frontend/guides/digital-signage-android-tv.html create mode 100644 frontend/guides/raspberry-pi-digital-signage.html create mode 100644 frontend/guides/self-hosted-digital-signage.html diff --git a/frontend/compare/optisigns-alternative.html b/frontend/compare/optisigns-alternative.html new file mode 100644 index 0000000..399f4e8 --- /dev/null +++ b/frontend/compare/optisigns-alternative.html @@ -0,0 +1,154 @@ + + + + + + Best OptiSigns Alternative (2026) - Free & Open Source | ScreenTinker + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Best OptiSigns Alternative (2026): ScreenTinker vs OptiSigns

+

OptiSigns has built a strong reputation in restaurants, retail, and small business signage. Here is an honest comparison with ScreenTinker covering features, pricing, and where each fits best.

+ +

The short answer

+

OptiSigns is a well-marketed cloud signage product with a deep template library and good documentation. It targets non-technical buyers and works particularly well for restaurants and retail menus.

+

ScreenTinker is open source (MIT licensed), self-hostable, supports more platforms natively, and is meaningfully cheaper at higher screen counts. It is a better fit if you have any technical capacity, you care about data sovereignty, or you operate at a scale where per-screen pricing hurts.

+ +

Quick comparison

+
+ + + + + + + + + + + + + + + + + + + + +
FeatureScreenTinkerOptiSigns
Open sourceYes (MIT)No
Self-host optionYesNo (cloud only)
Free plan1 device, 500MB14-day trial only
Android TV / Fire TVYesYes
Raspberry PiFree setup scriptLimited support
Windows / ChromeOSYesYes
Web browser playerYesLimited
Video wallsYes (with sync)Yes
Multi-zone layoutsYesYes
Template libraryCustom designerLarge library
Live remote controlYesScreenshot only
White-label / resellerYesYes
Pricing for 15 devices$99/mo Pro~$165/mo (11 USD/screen)
Self-host costFree (your server)Not available
+
+ +

Where OptiSigns does well

+
    +
  • Templates. Hundreds of pre-built templates for menus, real estate listings, gym schedules, and more. Best-in-class for non-designers who need to ship fast.
  • +
  • Niche features. POS integrations for restaurants, MLS feeds for real estate, fitness class schedule integrations.
  • +
  • Documentation and support. Extensive tutorial library, responsive support team.
  • +
+ +

Where ScreenTinker is the better choice

+
    +
  • Cost at scale. OptiSigns is around $11/screen/month on the Pro plan. At 15 devices that is $165/mo; ScreenTinker Pro is $99/mo. The gap widens as you add screens.
  • +
  • Self-hosting. If you cannot or will not put your signage data in a third-party cloud, ScreenTinker is one of the few real options. OptiSigns does not offer this.
  • +
  • Source access. MIT licensed on GitHub. Read the code, modify it, fork it.
  • +
  • Live remote control. Stream a live view of any display and inject taps or key events. Most cloud signage tools only show occasional screenshots.
  • +
  • Built-in player on more platforms. Native Android APK, web player works on any browser, Pi setup script, Windows-friendly, macOS-friendly.
  • +
+ +

Pricing example: 25 devices for one year

+
    +
  • OptiSigns Pro: ~$3,300/year (25 x $11/mo)
  • +
  • ScreenTinker: Custom Enterprise plan or self-host at server cost only
  • +
+ + + +
+

Try ScreenTinker free

+

Start a 14-day Pro trial. No credit card required.

+ Start Free Trial + View on GitHub +
+
+ + + + + + diff --git a/frontend/compare/screencloud-alternative.html b/frontend/compare/screencloud-alternative.html new file mode 100644 index 0000000..1b6a81d --- /dev/null +++ b/frontend/compare/screencloud-alternative.html @@ -0,0 +1,155 @@ + + + + + + Best ScreenCloud Alternative (2026) - Free & Open Source | ScreenTinker + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Best ScreenCloud Alternative (2026): ScreenTinker vs ScreenCloud

+

ScreenCloud is a polished enterprise digital signage platform - but pricing scales fast. Here is an honest comparison covering features, pricing, and where each fits best.

+ +

The short answer

+

ScreenCloud is a mature, well-designed cloud signage product targeted at mid-market and enterprise customers. It has strong app integrations (Slack, Power BI, Google Drive) and excellent support. It is also one of the most expensive options on the market.

+

ScreenTinker is open source (MIT licensed), self-hostable, and dramatically cheaper at scale. It is a better fit if you want to keep data on your own infrastructure, you have budget pressure, or your screen count makes ScreenCloud's per-screen pricing untenable.

+ +

Quick comparison

+
+ + + + + + + + + + + + + + + + + + + + +
FeatureScreenTinkerScreenCloud
Open sourceYes (MIT)No
Self-host optionYesNo (cloud only)
Free plan1 device, 500MB14-day trial only
Android TV / Fire TVYesYes
Raspberry PiFree setup scriptScreenCloud OS
Web browser playerYesYes
Video wallsYes (with sync)Yes
Multi-zone layoutsYesYes
App integrationsCustom widgetsBuilt-in (Slack, Power BI, etc.)
Live remote controlYesLimited
White-label / resellerYesEnterprise only
Pricing for 5 devices$39/mo Starter~$108/mo
Pricing for 15 devices$99/mo Pro~$300+/mo
Self-host costFree (your server)Not available
+
+ +

Where ScreenCloud does well

+
    +
  • Native app integrations. Slack channels, Power BI dashboards, Google Drive, OneDrive, and dozens of others ship as built-in apps. If your displays show live business dashboards, this matters.
  • +
  • Enterprise polish. SOC 2 audited, dedicated account management, mature SAML/SSO support.
  • +
  • Studio (their content designer). Best-in-class WYSIWYG editor for non-designers.
  • +
+ +

Where ScreenTinker is the better choice

+
    +
  • Cost. At 15 screens ScreenCloud runs roughly $300/mo and up depending on plan; ScreenTinker Pro is $99/mo. Over a year that is more than $2,000 in savings on a single deployment.
  • +
  • Self-hosting. ScreenCloud is cloud-only with no on-prem path. If your security team or compliance posture won't allow a third-party cloud, ScreenTinker is one of the few real options.
  • +
  • Source access. MIT licensed on GitHub. Audit, extend, fork - all permitted.
  • +
  • No hardware lock-in. ScreenCloud sells "ScreenCloud OS" hardware; ScreenTinker runs on whatever you have - Pi, Android TV, Fire Stick, kiosk PC, browser.
  • +
  • Live remote control. Stream a live view of any display and inject taps or key events from the dashboard. Useful for remote troubleshooting without a site visit.
  • +
+ +

Pricing example: 15 devices over 12 months

+
    +
  • ScreenCloud (Pro plan): ~$3,600/year
  • +
  • ScreenTinker (Pro plan): $1,188/year
  • +
  • ScreenTinker (self-hosted): Server cost only, typically $5-50/month for a small VPS
  • +
+ + + +
+

Try ScreenTinker free

+

Start a 14-day Pro trial. No credit card required.

+ Start Free Trial + View on GitHub +
+
+ + + + + + diff --git a/frontend/compare/yodeck-alternative.html b/frontend/compare/yodeck-alternative.html new file mode 100644 index 0000000..c023095 --- /dev/null +++ b/frontend/compare/yodeck-alternative.html @@ -0,0 +1,151 @@ + + + + + + Best Yodeck Alternative (2026) - Free & Open Source | ScreenTinker + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Best Yodeck Alternative (2026): ScreenTinker vs Yodeck

+

Looking for an open-source, self-hostable alternative to Yodeck? Here is an honest comparison covering pricing, features, platform support, and where each tool fits best.

+ +

The short answer

+

Yodeck is a polished, easy-to-use cloud digital signage product with a Pi player included on paid plans. It is a great fit if you want to plug in and go and you are happy with cloud-only hosting and per-screen pricing.

+

ScreenTinker is open source (MIT licensed), self-hostable, and supports more platforms out of the box. It is a better fit if you want to keep your data on your own infrastructure, avoid per-screen lock-in, or you have more than a handful of screens and want to control the cost curve.

+ +

Quick comparison

+
+ + + + + + + + + + + + + + + + + + + + +
FeatureScreenTinkerYodeck
Open sourceYes (MIT)No
Self-host optionYesNo (cloud only)
Free plan1 device, 500MB1 device
Android TV / Fire TVYesYes
Raspberry PiFree setup scriptPlayer included on paid plans
Windows / ChromeOSYes (web player)Limited
Web browser playerYesNo
Video walls (multi-screen sync)YesYes
Multi-zone layoutsYesYes
Live remote controlYesScreenshot only
Kiosk / interactive modeYesAdd-on
White-label / resellerYesEnterprise tier
Pricing for 15 devices$99/mo Pro~$120/mo (8 USD/screen)
Self-host costFree (your server)Not available
+
+ +

Where Yodeck does well

+
    +
  • Onboarding. Yodeck ships pre-configured Pi players on paid plans, which removes a real setup step for non-technical buyers.
  • +
  • Polish. The product has been around since 2014, and the cloud experience is mature.
  • +
  • Templates. A large pre-built template library for menus, lobby boards, and announcements.
  • +
+ +

Where ScreenTinker is the better choice

+
    +
  • You need data sovereignty. If your content includes PII, internal documents, or you operate in regulated industries (healthcare, government, finance), self-hosting is the only way to keep data off a third-party cloud. Yodeck cannot do this.
  • +
  • You have more than a handful of screens. Per-screen pricing scales linearly. ScreenTinker Pro is flat at $99/mo for 15 devices, and self-hosters pay nothing per device. At 50+ screens the total cost difference is significant.
  • +
  • You want platform flexibility. ScreenTinker runs on any device with a browser - Smart TVs, ChromeOS, kiosk PCs, even old Macs. You are not locked into a specific Pi SKU.
  • +
  • You want to read or modify the source. ScreenTinker is MIT licensed on GitHub. Audit the code, extend it, or fork it.
  • +
  • You want live remote control. ScreenTinker streams a live screenshot feed and forwards touches and key events back to the device. Yodeck only takes occasional screenshots.
  • +
+ +

Pricing snapshot

+

Yodeck charges per screen per month, typically $8/screen/mo on the standard plan with annual billing. ScreenTinker Pro is a flat $99/mo for 15 devices. Crossover happens around 12-13 screens; above that ScreenTinker is meaningfully cheaper. Self-hosters pay nothing per device.

+ + + +
+

Try ScreenTinker free

+

Start a 14-day Pro trial. No credit card required.

+ Start Free Trial + View on GitHub +
+
+ + + + + + diff --git a/frontend/css/seo-page.css b/frontend/css/seo-page.css new file mode 100644 index 0000000..5fd23bb --- /dev/null +++ b/frontend/css/seo-page.css @@ -0,0 +1,87 @@ +/* Shared styles for SEO landing pages: comparison and guide pages. + Matches the dark theme of landing.html. */ + +* { margin: 0; padding: 0; box-sizing: border-box; } +:root { --accent:#3b82f6; --bg:#111827; --card:#1e293b; --border:#334155; --text:#f1f5f9; --muted:#94a3b8; --dim:#64748b; } +body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: var(--bg); color: var(--text); line-height: 1.65; } +a { color: var(--accent); text-decoration: none; } +a:hover { text-decoration: underline; } + +/* Nav (matches landing.html) */ +nav { position: fixed; top: 0; left: 0; right: 0; z-index: 100; background: rgba(17,24,39,0.9); backdrop-filter: blur(12px); border-bottom: 1px solid var(--border); } +.nav-inner { max-width: 1200px; margin: 0 auto; padding: 16px 24px; display: flex; align-items: center; justify-content: space-between; } +.nav-logo { display: flex; align-items: center; gap: 10px; font-weight: 700; font-size: 18px; color: var(--accent); flex-shrink: 0; } +.nav-logo a { color: var(--accent); } +.nav-links { display: flex; align-items: center; flex-wrap: nowrap; } +.nav-links a { color: var(--muted); margin-left: 24px; font-size: 14px; transition: color 0.2s; } +.nav-links a:hover { color: var(--text); text-decoration: none; } +.btn { display: inline-flex; align-items: center; gap: 8px; padding: 10px 20px; border-radius: 8px; font-weight: 600; font-size: 14px; transition: all 0.2s; border: none; cursor: pointer; } +.btn-primary { background: var(--accent); color: white; } +.btn-primary:hover { background: #2563eb; text-decoration: none; } +.btn-outline { background: transparent; color: var(--accent); border: 1px solid var(--accent); } +.btn-outline:hover { background: rgba(59,130,246,0.1); text-decoration: none; } + +/* Article container */ +.article { max-width: 880px; margin: 0 auto; padding: 120px 24px 60px; } +.breadcrumb { font-size: 13px; color: var(--muted); margin-bottom: 24px; } +.breadcrumb a { color: var(--muted); } +.breadcrumb a:hover { color: var(--text); } +.breadcrumb span { margin: 0 8px; color: var(--dim); } + +.article h1 { font-size: clamp(30px, 4vw, 44px); font-weight: 800; line-height: 1.2; margin-bottom: 16px; } +.article .lead { font-size: 18px; color: var(--muted); margin-bottom: 32px; } +.article h2 { font-size: 28px; font-weight: 700; margin: 48px 0 16px; line-height: 1.3; } +.article h3 { font-size: 20px; font-weight: 600; margin: 28px 0 12px; } +.article p { margin-bottom: 16px; color: var(--text); } +.article ul, .article ol { margin: 0 0 16px 24px; color: var(--text); } +.article li { margin-bottom: 8px; } +.article strong { color: var(--text); font-weight: 600; } +.article code { background: var(--card); border: 1px solid var(--border); padding: 2px 6px; border-radius: 4px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 0.9em; color: #e2e8f0; } +.article pre { background: var(--card); border: 1px solid var(--border); padding: 16px; border-radius: 8px; overflow-x: auto; margin: 16px 0; } +.article pre code { background: transparent; border: none; padding: 0; font-size: 13px; } +.article blockquote { border-left: 3px solid var(--accent); padding: 8px 16px; margin: 16px 0; color: var(--muted); background: rgba(59,130,246,0.06); border-radius: 4px; } + +/* Comparison table */ +.compare-table-wrap { width: 100%; overflow-x: auto; margin: 24px 0; -webkit-overflow-scrolling: touch; } +.compare-table { width: 100%; border-collapse: collapse; font-size: 14px; min-width: 640px; } +.compare-table th, .compare-table td { padding: 12px 16px; text-align: left; border-bottom: 1px solid var(--border); } +.compare-table th { color: var(--text); font-weight: 600; background: var(--card); } +.compare-table td:first-child { color: var(--muted); } +.compare-table .yes { color: #22c55e; font-weight: 600; } +.compare-table .no { color: #ef4444; } +.compare-table .partial { color: #f59e0b; } +.compare-table tbody tr:hover { background: rgba(59,130,246,0.04); } + +/* CTA */ +.cta { text-align: center; padding: 60px 24px; background: linear-gradient(135deg, rgba(59,130,246,0.1), rgba(139,92,246,0.1)); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); margin: 48px 0; border-radius: 12px; } +.cta h2 { font-size: 28px; margin: 0 0 12px; } +.cta p { color: var(--muted); margin-bottom: 20px; font-size: 17px; } + +/* Related links / internal linking block */ +.related { background: var(--card); border: 1px solid var(--border); border-radius: 12px; padding: 24px; margin: 32px 0; } +.related h2 { margin: 0 0 12px; font-size: 20px; } +.related ul { margin: 0; list-style: none; } +.related li { margin: 8px 0; padding-left: 0; } +.related li::before { content: '> '; color: var(--accent); font-weight: 700; } + +/* Footer (matches landing.html) */ +footer { max-width: 1200px; margin: 0 auto; padding: 40px 24px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 16px; border-top: 1px solid var(--border); } +footer .links a { color: var(--dim); margin-left: 16px; font-size: 13px; } +footer .links a:hover { color: var(--text); text-decoration: none; } + +/* Mobile */ +@media (max-width: 768px) { + .nav-links a:not(.btn) { display: none; } + .nav-inner { padding: 12px 14px; gap: 8px; } + .nav-links .btn { padding: 8px 12px; font-size: 13px; margin-left: 8px; flex-shrink: 0; min-height: 0; } + .btn { min-height: 44px; } + .article { padding: 100px 16px 40px; } + .cta { padding: 40px 16px; } + footer { flex-direction: column; text-align: center; } + footer .links a { margin: 4px 8px; } + .compare-table { font-size: 12px; } + .compare-table th, .compare-table td { padding: 8px; } +} +@media (max-width: 420px) { + .nav-logo-text { display: none; } +} diff --git a/frontend/guides/digital-signage-android-tv.html b/frontend/guides/digital-signage-android-tv.html new file mode 100644 index 0000000..b2d4957 --- /dev/null +++ b/frontend/guides/digital-signage-android-tv.html @@ -0,0 +1,157 @@ + + + + + + Free Digital Signage for Android TV & Fire TV (2026) | ScreenTinker + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Free Digital Signage for Android TV and Fire TV (2026)

+

Turn any Android TV box, Apolosign player, or Amazon Fire Stick into a fully managed digital signage display using the free ScreenTinker APK.

+ +

What works

+
    +
  • Android TV (Sony, Hisense, Philips, Onn, NVIDIA Shield, generic Android TV boxes)
  • +
  • Amazon Fire TV / Fire Stick (4K, 4K Max, Cube)
  • +
  • Apolosign signage players (Android-based commercial signage hardware)
  • +
  • Tablets running Android 8+ mounted as in-store displays
  • +
+ +

Step 1: Get the APK

+

Download the ScreenTinker APK from screentinker.com/download/apk. The latest signed release is hosted directly so you do not need a Play Store or App Store account.

+ +

Step 2: Sideload onto the device

+

On Android TV

+

The easiest path is to install the Downloader app from the Google Play Store on the TV, then enter the URL https://screentinker.com/download/apk. Downloader fetches the APK and walks you through installing it. You will be prompted once to "allow installs from this source" - say yes.

+ +

On Fire TV / Fire Stick

+

Install Downloader from the Amazon App Store. In Settings > My Fire TV > Developer Options, enable Apps from Unknown Sources. Open Downloader, enter https://screentinker.com/download/apk, and install.

+ +

On Apolosign / commercial Android signage hardware

+

These devices typically expose a system file manager. Plug in a USB drive containing the APK, open the file manager, and tap the APK to install. Some Apolosign units allow direct URL install via the built-in browser.

+ +

Step 3: Pair the device

+

Launch the ScreenTinker app. The first time it runs, you will be asked to grant a few permissions:

+
    +
  • Display over other apps - so the player can stay fullscreen
  • +
  • Storage - for the local content cache
  • +
  • Accessibility service (optional) - enables remote touch and key injection from the dashboard
  • +
+

The app will then show a 6-digit pairing code. Sign in to your ScreenTinker dashboard, click + Add Display, and enter the code.

+ +

Step 4: Push content

+

Same as any other ScreenTinker display:

+
    +
  1. Upload media in the Content Library
  2. +
  3. Build a Playlist
  4. +
  5. Publish the playlist and assign it to your device
  6. +
+ +

Kiosk mode tips

+

For unattended displays you generally want the device to boot straight into the player with no way for someone to back out:

+
    +
  • Set ScreenTinker as the launcher. The APK declares HOME intent support, so on most Android TVs you can pick it as the default launcher in Settings > Apps.
  • +
  • Disable updates and notifications on the device to prevent unwanted popups.
  • +
  • Enable auto-power-on in TV settings if you want the display to come back after a power blip without manual intervention.
  • +
  • For Fire Stick, use the Wolf Launcher or similar to replace the Amazon home screen.
  • +
+ +

Hardware recommendations

+
    +
  • Lowest cost: Amazon Fire TV Stick 4K. ~$50 and works fine for image and 1080p video playlists.
  • +
  • Best value: Onn 4K Streaming Box. ~$30 at Walmart and runs Android TV stock.
  • +
  • Commercial: Apolosign players. Ship with built-in mount, real-time clock, and HDMI-CEC for power management. Recommended for production deployments.
  • +
  • Highest performance: NVIDIA Shield TV. Overkill for signage but bulletproof.
  • +
+ + + +
+

Ready to deploy?

+

Free plan supports 1 device. Pro trial unlocks 15 devices for 14 days, no credit card.

+ Start Free + Download APK +
+
+ + + + + + diff --git a/frontend/guides/raspberry-pi-digital-signage.html b/frontend/guides/raspberry-pi-digital-signage.html new file mode 100644 index 0000000..3968c74 --- /dev/null +++ b/frontend/guides/raspberry-pi-digital-signage.html @@ -0,0 +1,167 @@ + + + + + + How to Set Up Digital Signage on Raspberry Pi (2026) | ScreenTinker + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

How to Set Up Digital Signage on a Raspberry Pi (2026)

+

A step-by-step guide to turning a Raspberry Pi into a free, open-source digital signage player using ScreenTinker. Works on Pi 3, Pi 4, and Pi 5.

+ +

What you will need

+
    +
  • Raspberry Pi 3, Pi 4, or Pi 5. Pi 4 (4GB+) is the sweet spot. Pi 3 works for static images and 1080p video. Pi 5 is overkill but futureproof.
  • +
  • microSD card, 16 GB or larger. Class 10 or A1/A2 rated.
  • +
  • Power supply appropriate for your model (Pi 4 uses USB-C 15W; Pi 5 uses USB-C 27W).
  • +
  • HDMI cable to your TV or monitor (micro-HDMI on Pi 4/5).
  • +
  • Network connection - Ethernet preferred for reliability, Wi-Fi works fine.
  • +
  • A ScreenTinker account. Sign up free if you do not have one.
  • +
+ +

Step 1: Install Raspberry Pi OS

+

Use Raspberry Pi Imager to flash Raspberry Pi OS (64-bit) to your microSD card. Choose the standard Desktop edition (not Lite - we need a desktop environment for the browser).

+

In the Imager's advanced options (gear icon), pre-set:

+
    +
  • Hostname (e.g. signage-lobby)
  • +
  • Username and password
  • +
  • Wi-Fi credentials (if not using Ethernet)
  • +
  • Enable SSH (optional but useful for remote management)
  • +
+

Insert the SD card, plug in the Pi, and let it boot through first-time setup.

+ +

Step 2: Run the ScreenTinker installer

+

Open a terminal on the Pi and run:

+
curl -sL https://screentinker.com/scripts/raspberry-pi-setup.sh | bash
+

The script will:

+
    +
  • Install Chromium (the kiosk browser used as the player)
  • +
  • Set up an autostart entry so the player launches in fullscreen on boot
  • +
  • Disable screen blanking and the screensaver
  • +
  • Configure HDMI to keep the display awake
  • +
  • Reboot the Pi when finished
  • +
+

On reboot the Pi will launch directly into the ScreenTinker player and show a 6-digit pairing code.

+ +

Step 3: Pair the Pi to your dashboard

+

Sign in to your ScreenTinker dashboard and click + Add Display. Enter the 6-digit code shown on the Pi and give the display a name (e.g. "Lobby TV"). The Pi will switch from the pairing screen to "Waiting for content".

+ +

Step 4: Push content

+

From the dashboard:

+
    +
  1. Open Content Library and upload an image, video, or paste a remote URL.
  2. +
  3. Open Playlists, create a playlist, and add items.
  4. +
  5. Publish the playlist.
  6. +
  7. From the device's detail page, assign the playlist.
  8. +
+

The Pi picks up the new playlist within a few seconds and starts playing.

+ +

Performance tips

+
    +
  • Use H.264 video. Pi GPUs accelerate H.264 in hardware. H.265/HEVC works on Pi 4/5 but uses more CPU.
  • +
  • Match your resolution to the display. 1080p video on a 1080p screen avoids unnecessary scaling.
  • +
  • Wired Ethernet is more reliable than Wi-Fi for video-heavy playlists. Wi-Fi is fine for image-heavy ones.
  • +
  • For Pi 3, stick to images and short clips. Pi 3 can struggle with continuous 1080p video.
  • +
+ +

Troubleshooting

+

The Pi reboots into the desktop, not the player

+

Check that the autostart file ~/.config/autostart/screentinker.desktop exists. The installer creates this; if it's missing, re-run the installer.

+ +

The screen goes dark after a few minutes

+

The installer should disable screen blanking, but some monitors sleep based on their own timer. Disable sleep mode on the monitor itself, or use a dummy HDMI plug if the Pi negotiates a low-power mode.

+ +

The Pi shows the pairing code but I can't see it on the dashboard

+

The pairing code is shown on the Pi screen, not the dashboard. Sign in, click Add Display, and type the code from the Pi.

+ + + +
+

Ready to set up your Pi?

+

Start a free ScreenTinker account in under a minute.

+ Start Free + View on GitHub +
+
+ + + + + + diff --git a/frontend/guides/self-hosted-digital-signage.html b/frontend/guides/self-hosted-digital-signage.html new file mode 100644 index 0000000..fe45d31 --- /dev/null +++ b/frontend/guides/self-hosted-digital-signage.html @@ -0,0 +1,196 @@ + + + + + + Self-Hosted Digital Signage Software - Complete Guide (2026) | ScreenTinker + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Self-Hosted Digital Signage Software: Complete Guide (2026)

+

Why you might want to self-host your digital signage CMS, what you need to do it well, and how to deploy ScreenTinker on your own server.

+ +

Why self-host digital signage?

+

Most digital signage products are cloud-only. That works for many businesses, but there are real reasons to keep the server in-house:

+
    +
  • Data sovereignty. Healthcare, finance, government, and education often cannot put internal information into a third-party cloud. Self-hosting keeps content, schedules, and access logs on your network.
  • +
  • Cost control. Per-screen monthly fees stack up fast. Self-hosting trades that for a fixed server cost - typically $5 to $50 per month for a small VPS that can run hundreds of screens.
  • +
  • Network isolation. Some deployments live on private LANs with no internet access at all. Self-hosting is the only way to manage signage in those environments.
  • +
  • No vendor lock-in. If the cloud vendor disappears, raises prices 3x, or pivots away from your use case, your deployment goes with them. Self-hosters control their own roadmap.
  • +
  • Customization. Open source self-hosted means you can fork the code, add a custom widget, or wire it into your existing systems.
  • +
+ +

What you need

+

Hardware / VPS

+

A modest Linux server is enough for most deployments:

+
    +
  • Up to 25 displays: 1 vCPU, 1 GB RAM, 20 GB disk. ~$5/month on Hetzner, DigitalOcean, or Vultr.
  • +
  • 25-100 displays: 2 vCPU, 2 GB RAM, 40 GB disk. ~$12-20/month.
  • +
  • 100+ displays: 4+ vCPU, 4+ GB RAM, faster disk. Plan for content storage at ~50-200 MB per screen depending on media volume.
  • +
+

An on-prem VM works just as well as a cloud VPS - in fact, on-prem is often the whole point.

+ +

Software prerequisites

+
    +
  • Ubuntu 22.04 or 24.04 LTS (Debian 12 also works)
  • +
  • Node.js 18 or newer
  • +
  • A domain name pointed at your server (or just an internal hostname / IP for LAN deployments)
  • +
  • SSL certificate (Let's Encrypt is free; or self-signed for LAN)
  • +
+ +

Deploying ScreenTinker

+

Detailed setup is in the GitHub README. Quick version:

+
git clone https://github.com/screentinker/screentinker.git
+cd screentinker/server
+npm install
+cp .env.example .env
+# edit .env with your domain, JWT_SECRET, and SELF_HOSTED=true
+node server.js
+

Set SELF_HOSTED=true in the env. This unlocks the enterprise plan for your account, disables subscription expiry checks, and skips Stripe entirely. It is meant for the operator-controlled deployment case.

+ +

Reverse proxy and TLS

+

ScreenTinker listens on HTTP/HTTPS directly, but in production you typically front it with nginx or Caddy for TLS termination, gzip, and rate limiting. A minimal Caddyfile:

+
signage.example.com {
+  reverse_proxy localhost:3001
+}
+

Caddy handles Let's Encrypt automatically. nginx works too if your team prefers it.

+ +

Running as a service

+

Use systemd to keep the process alive across reboots. A unit file at /etc/systemd/system/screentinker.service:

+
[Unit]
+Description=ScreenTinker Digital Signage Server
+After=network.target
+
+[Service]
+WorkingDirectory=/opt/screentinker/server
+ExecStart=/usr/bin/node server.js
+EnvironmentFile=/opt/screentinker/.env
+Restart=always
+User=screentinker
+
+[Install]
+WantedBy=multi-user.target
+

Enable with systemctl enable --now screentinker.

+ +

Backups

+

The state lives in two places:

+
    +
  • server/db/remote_display.db - SQLite database of users, devices, playlists, schedules
  • +
  • server/uploads/ - uploaded media (images, videos, thumbnails)
  • +
+

A nightly tarball of those two paths gives you a full restore point. Pair with offsite sync (rclone, restic) for disaster recovery.

+ +

Self-hosted vs cloud-hosted comparison

+
+ + + + + + + + + + + + + + + +
ConcernScreenTinker self-hostedCloud-only signage products
Data locationYour serverVendor's cloud
Recurring per-screen costNone$5-15/screen/month
Server cost$5-50/month flatNone (included)
Internet required for managementNo (LAN works)Yes
Source code accessYes (MIT)Closed
Air-gapped deploymentPossibleNot possible
Vendor lock-in riskNone (you own it)High
Update / patch responsibilityYoursVendor
Initial setup time~1 hour~5 minutes
+
+ +

When the cloud is the right answer

+

Self-hosting is not free of cost - it requires someone who can run a Linux server, monitor it, and apply security updates. If your screen count is small (under ~10) and you do not have IT capacity, the managed cloud version is probably the right choice. ScreenTinker's hosted plans start at $39/mo for 5 devices.

+ + + +
+

Try the cloud version first

+

Use the hosted version to get familiar, then deploy on your own server when you are ready.

+ Start Free + View on GitHub +
+
+ + + + + + diff --git a/frontend/landing.html b/frontend/landing.html index c2b46cc..7af8a38 100644 --- a/frontend/landing.html +++ b/frontend/landing.html @@ -5,9 +5,9 @@ - ScreenTinker - Open-Source Digital Signage CMS | Free Display Management - - + ScreenTinker - Self-Hosted Open-Source Digital Signage CMS | Free Display Management + + @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ - + @@ -192,7 +192,7 @@
- ScreenTinker dashboard showing 4 online displays with playlist assignments + ScreenTinker open-source digital signage dashboard showing 4 online displays with playlist assignments
@@ -276,6 +276,44 @@ + +
+

Resources

+

Setup guides and honest comparisons.

+
+ +
Guide
+
How to set up digital signage on Raspberry Pi
+
Hardware, OS, install script, pairing.
+
+ +
Guide
+
Free digital signage for Android TV & Fire TV
+
APK sideload, kiosk mode, hardware tips.
+
+ +
Guide
+
Self-hosted digital signage guide
+
Sizing, deploy, TLS, backups.
+
+ +
Compare
+
ScreenTinker vs Yodeck
+
Features, pricing, platform support.
+
+ +
Compare
+
ScreenTinker vs ScreenCloud
+
Pricing breakdown at scale.
+
+ +
Compare
+
ScreenTinker vs OptiSigns
+
Side by side feature and price comparison.
+
+
+
+

Ready to Get Started?

@@ -285,18 +323,50 @@ - +
+ © 2026 ScreenTinker. All rights reserved. +
+