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

+ + +

Where ScreenTinker is the better choice

+ + +

Pricing example: 25 devices for one year

+ + + + +
+

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

+ + +

Where ScreenTinker is the better choice

+ + +

Pricing example: 15 devices over 12 months

+ + + + +
+

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

+ + +

Where ScreenTinker is the better choice

+ + +

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

+ + +

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:

+ +

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:

+ + +

Hardware recommendations

+ + + + +
+

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

+ + +

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:

+ +

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:

+ +

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

+ + +

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:

+ + +

What you need

+

Hardware / VPS

+

A modest Linux server is enough for most deployments:

+ +

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

+ +

Software prerequisites

+ + +

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:

+ +

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. +
+