Arcadify · Pixel Forge

Launch your own HTML5 gaming portal.

Everything you need to install, activate, configure and grow your game portal, from the first upload to your first payout. Thank you for choosing Arcadify!

Laravel 12Filament 5 adminPHP 8.2+6 languages · RTL7 themes1-click installer
01

Introduction

Arcadify is a self-hosted portal for free online HTML5 games. It imports thousands of games from the major distribution networks, keeps them in sync, and turns visitors into a community with levels, achievements, a Wall of Fame and optional play-and-earn reward events, all managed from a polished admin panel.

Arcadify home page with the Pixel Forge theme
The storefront with the default Pixel Forge theme. Game artwork is shown as neutral tiles in this guide; your site displays the real thumbnails from the providers.

Huge catalogue

Import from GameDistribution, GameMonetize, GamePix, Famobi, Gamezop and HTMLGames, with nightly sync of the newest games.

Six languages

English, Arabic (RTL), Chinese, Hindi, Spanish and French: every screen, email and form message. Add more from the admin panel.

Community & XP

Profiles, 100 levels with 16 honor emblems, achievements, comments, likes, favourites and the Wall of Fame.

Play & earn

Time-limited reward events with wallets and withdrawals that you approve. Switch the feature off with one toggle.

Monetisation

Ad units for 12 placements, pre-roll ads, ads.txt, and provider revenue-share IDs added to every game.

Shared-hosting ready

Upload to public_html and run the web installer. No terminal and no document-root changes.

Quick startCreate a MySQL database, upload the contents of the arcadify folder to your hosting account, open https://your-domain.com/install and follow the wizard. Then add the cron job shown on the last screen.
02

Package contents

FolderContents
arcadify/The application. Upload the contents of this folder to your server.
documentation/This guide. Open index.html in any browser; it works offline.

Inside the application, the folders you are most likely to touch are:

PathPurpose
public/The web root: front controller, compiled assets, uploads and published theme files.
themes/Theme sources (theme.json, CSS, optional view and language overrides).
lang/Bundled translations: interface texts (en.json, ar.json…) and form and email messages (ar/validation.php…). Edits made in the admin panel are stored in the database and survive updates.
storage/Logs, caches, sessions, the license certificate and private files. Must be writable.
.envCreated by the installer. Holds the database connection and the application key.
03

Server requirements

RequirementDetails
PHP8.2 or newer (8.3 and 8.4 are supported)
PHP extensionsbcmath, ctype, curl, dom, fileinfo, filter, gd, intl, json, mbstring, openssl, pdo, pdo_mysql, tokenizer, xml, zip. sodium is used when available (a bundled fallback verifies signatures otherwise); imagick is optional.
DatabaseMySQL 5.7.8+ or MariaDB 10.3+
Web serverApache or LiteSpeed with mod_rewrite, or Nginx
PHP limitsmemory_limit 256M recommended · max_execution_time 60 seconds or more · upload_max_filesize 32M or more (theme and game uploads)
Outgoing connectionscURL or allow_url_fopen, to import games, activate the license and download updates
HTTPSStrongly recommended. Browsers require it for fullscreen games, app installation and secure sign-in.
CronOne cron job every minute (see Cron job); a visitor-driven fallback runs when there is none.

The installer checks all of this and tells you exactly what to fix. Your host can enable missing extensions in a few clicks (in cPanel: Select PHP Version → Extensions).

Large cataloguesWith tens of thousands of games, MySQL's innodb_buffer_pool_size should be at least 128M (the default on most hosts) so listings and search stay fast.
04

Installation

Shared hosting (cPanel, Plesk, DirectAdmin)

  1. Create a database. In cPanel open MySQL® Database Wizard, create a database and a user, and give the user All privileges. Write down the database name, user name and password.
  2. Upload the files. Open File Manager, go to public_html (or a sub-folder such as public_html/games), upload a zip of the arcadify folder's contents and extract it there.
  3. Run the installer. Visit https://your-domain.com/install (or https://your-domain.com/games/install for a sub-folder) and follow the wizard below.
  4. Add the cron job shown on the last installer screen.

You do not need to change the document root: the .htaccess file in the application folder routes every request into public/, blocks hidden files such as .env, and keeps application code out of reach.

Hidden filesMake sure your FTP client or file manager uploads hidden files (names starting with a dot), especially .htaccess in both the application folder and public/.

The installation wizard

The wizard is available in all six languages and takes about two minutes. Each step is checked before you can continue.

Installer welcome step
1 · Welcome. Choose the language of the wizard and of your site.
Installer requirements step
2 · Requirements. PHP, extensions, limits and writable folders. Fix anything in red, then click Check again.
Installer license step
3 · License. Paste your purchase code or EKR license key (see License activation). Local and staging addresses skip this step.
Installer database step
4 · Database. Host (usually localhost), port 3306, database, user and password. The connection is tested before you continue.
Installer site step
5 · Site. Site name and address, default theme and mode, and your administrator account.
Installer content step
6 · Content. Pick the providers for your first games and how many to import, plus optional demo content.
Installer progress step
7 · Install. Configuration, tables, languages, levels, achievements, avatars and games, step by step. Keep the page open.
Installer finished step
8 · Finished. Your portal is live. The cron line for your server is shown here, ready to copy.
Re-running the installerOnce installed, /install is locked. To start over, delete storage/app/installed.json and .env, empty the database and open /install again.

VPS, dedicated servers and Nginx

When you control the server, point the document root at the public folder, which is the most secure setup. For Nginx:

server {
    listen 80;
    server_name example.com;
    root /var/www/arcadify/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Give the web server user write access to storage/, bootstrap/cache/, public/uploads/, public/themes/, themes/ and, during installation, the application folder itself (so the installer can create .env):

chown -R www-data:www-data /var/www/arcadify
find /var/www/arcadify -type d -exec chmod 755 {} \;
find /var/www/arcadify -type f -exec chmod 644 {} \;

Cron job

Arcadify uses one cron entry that runs every minute. The exact line for your server, with the correct PHP path, is shown at the end of the installer and under Admin → System → System health. It looks like this:

* * * * * /usr/local/bin/php /home/USER/public_html/artisan schedule:run >> /dev/null 2>&1

In cPanel open Cron Jobs, choose Once Per Minute, paste the command and save. Without cron, background tasks still run while visitors browse, just less precisely; System health warns you when the scheduler has been silent.

TaskFrequency
Queue worker (emails, notifications)Every minute
IndexNow notifications to search enginesEvery 10 minutes
"Similar games" recommendationsEvery 30 minutes
Trending scoresHourly
Provider sync (new games)Daily at 03:30
License certificate refreshDaily at 04:10
Clean-up of old play sessions, search logs, read notifications and import historyDaily at 04:40
05

License activation

Your license is managed by the EKR license portal at ekr-portal.cloud. Activation unlocks signed one-click updates and support, and is done once per domain.

  • The installer asks for activation on a live domain. Local and staging addresses never need it: localhost, 127.0.0.1, *.localhost, *.test, *.local and private-network IP addresses.
  • You can also activate, re-check or deactivate later in Admin → System → License.
  • Activation sends your code, your domain and an anonymous installation ID to the portal over an encrypted connection. The portal answers with a certificate signed with Ed25519, which your site verifies and stores.
  • The certificate is renewed daily. Short outages of the license server have no effect: there is a 14-day offline grace period.
  • A Regular license covers one production domain; an Extended license covers up to five.

Where is my code?

You bought onWhat to do
A marketplace or storeSign in at ekr-portal.cloud (create a free account if needed) and add your purchase under Licenses. Then paste your purchase code, or the EKR license key you receive, in the installer.
EKR license keyAlready have a key that starts with EKR- (for example from support or a reviewer note)? Paste it as it is.
License page in the admin panel
Admin → System → License: status, licensed domains, renewal date, and the activate, check and deactivate actions.

Activation messages

MessageWhat it means and what to do
We could not find this codeThe portal does not know this code yet. Add the purchase to your EKR account first (Licenses), or use the EKR license key you received.
This license is not linked to ArcadifyThe code belongs to another product, or the license still needs to be linked. Use your Arcadify code or contact support.
Maximum number of domainsThe license is already active on its allowed domains. Free one in your EKR account, or deactivate the old site in Admin → License first.
Inactive or suspendedThe license was disabled on the portal (refunds, abuse). Contact support.
This address cannot be activatedOpen the installer from your real domain (for example https://example.com), not an IP address or a temporary URL.
Too many attemptsWait one minute and try again.
The license server could not be reachedYour server cannot make outgoing HTTPS requests to ekr-portal.cloud. Ask your host to allow it (cURL with OpenSSL).
Moving to a new domainClick Deactivate on this site on the old site, move files and database, then activate the same code on the new domain.
06

Admin panel

Sign in with your administrator account and open /admin. The panel follows your language (right-to-left for Arabic) and supports light and dark mode.

Admin dashboard
The dashboard: players online, plays, sign-ups, devices, the week's top games, newest players and items waiting for moderation.
GroupSections
Games catalogGames, Categories, Tags, Import center (providers)
CommunityPlayers, Comments, Reports, Messages
Levels & achievementsLevels, Achievements, Avatars
Play & earnReward events, Withdrawals, Wallet transactions
Site contentPages, Menus, Banners & hero slides, Redirects
MonetizationAd units
Languages & settingsLanguages, Translations, and 17 settings pages: General, Appearance, Home page, XP & gameplay, Comments, Accounts & sign-in, Email delivery, Spam protection, SEO, Search engines & analytics, Advertising, Play & earn, Recommendations, Custom code, Privacy & cookies, Performance, Translation
SystemThemes, License, Updates, System health, Activity log

Logo, favicon, site name, tagline, contact email and social profiles live in Settings → General. Image fields accept an upload or an image URL (downloaded to your server); icon fields also offer the built-in 3D icon library.

Games manager
Games manager: search, filters, bulk actions, featured toggles.
System health
System health: scheduler, caches, assets and one-click maintenance tools.

Staff roles

RoleAccess
AdministratorEverything, including settings, themes, license, updates and staff accounts.
ModeratorGames, categories, tags, players, comments, reports and messages. Moderators manage player accounts only: staff accounts (moderators and administrators) can be changed by administrators alone.
PlayerThe public site and their own account.

Change a member's role in Community → Players → Edit → Role. Every sensitive change (XP or wallet adjustments, license, updates, maintenance tools) is written to the activity log.

07

Games & providers

The Import center (Games catalog → Import center) connects your publisher accounts and pulls the latest games from each network. Publisher and revenue-share parameters are added to every game's embed address automatically, so you earn from the ads the networks show inside their games.

Import center
The Import center: enable providers, add your publisher IDs, import now or every night.
ProviderWhat to enter
GameDistributionNo credentials needed
GameMonetizeNo credentials needed
GamePixPublisher site ID (sid), from the GamePix publisher dashboard → Sites
FamobiAffiliate ID (A-XXXXX), shown in your Famobi partner account
GamezopThe numeric property ID of your Gamezop publisher account
HTMLGamesNo credentials needed
  • Import now: open a provider, choose how many games and click Import games. Large imports run in batches.
  • Nightly sync: enable Import new games automatically every night on each provider.
  • Copy thumbnails: optionally store imported images on your server (about 30 KB per game) to be independent from provider CDNs.
  • Your own games: Games → Add a game supports iframe embeds (an https:// address) and self-hosted HTML5 packages.
  • Game of the Week is picked automatically from the most played games of the last 7 days, or pinned in Settings → Home page.

Changing a game, category or tag slug adds a 301 redirect automatically; manage all redirects under Site content → Redirects.

08

Home page builder

Settings → Home page arranges the home page without code: reorder sections by drag and drop, switch them on or off, rename them, and choose how each one looks.

Home page builder
The hero slider, category carousel, game shelves, Game of the Week, SEO text and ad placements, all configurable.
  • Hero slider: featured games or your banners, autoplay timing, arrows, indicators and the theme character.
  • Category carousel: categories and artwork, icon size, autoplay and game counts.
  • Game shelves: trending, new, most played, top rated, featured or any category, with card or row layouts.
  • Reward events: live or upcoming events with their prizes and countdown, linking to the rewards hub.
  • Ads between sections: choose how many sections separate two ad placements.
09

Languages & translations

Arcadify ships fully translated into English, Arabic, Chinese (Simplified), Hindi, Spanish and French: over 1,500 interface texts, plus form validation, sign-in and email messages. Arabic switches the whole site, admin panel and installer to right-to-left.

Arabic storefront in right-to-left
The Arabic storefront, mirrored right-to-left automatically.

Language settings

  • Languages & settings → Languages: activate, deactivate, reorder, set the default language and the hreflang code.
  • The default language uses addresses without a prefix (example.com/game/x); other languages use one (example.com/fr/game/x).

Editing texts

Translations lists every interface text side by side with English. Changes go live immediately and are stored in the database, so updates never overwrite them. Export a language to JSON, edit it elsewhere and import it back, or reset it to the bundled translation.

Translation editor
The translation editor with completion per language.

Adding a language

  1. Create the language in Languages (code such as de or pt-BR, names, text direction and flag).
  2. Open Translations and translate the texts manually, by importing a JSON file, or with Translate missing automatically.
  3. For form and email messages in the new language, copy lang/es to lang/{code} and translate the values.

Machine translation

Configure DeepL, Google Cloud Translation or LibreTranslate in Settings → Translation. It fills missing interface texts and can translate the descriptions of newly imported games. Placeholders such as :name are protected automatically.

Content (game titles and descriptions, categories, pages, banners, menus, achievements…) is translatable per language directly in each edit form.

10

Themes

Arcadify includes seven complete themes: Pixel Forge (default), Candy Clay, Coin-Op Arcade, Holographic Glass, Neo Chrome, Retro Inflatable and Royal Enamel. Each has light and dark modes, right-to-left support and its own 3D artwork.

Themes manager
System → Themes: activate, customise, offer to visitors, upload or delete themes.
  • Activate a theme to make it the site's default look.
  • Customise changes colours and shapes without touching code.
  • Visitor picker: offer selected themes to visitors (everyone, or signed-in members only). Member choices are saved to their accounts.
  • Upload a theme packaged as a .zip file with theme.json at its root.
  • Choose the default mode (light, dark or system) in Settings → Appearance.
Site looks unstyled?Use Publish theme assets in System health (or run php artisan arcadify:themes:publish) to copy compiled theme files to public/themes.

Creating a theme

A theme is a folder inside themes/:

themes/my-theme/
├── theme.json          # manifest (required)
├── screenshot.webp     # 800×1100 preview for the admin panel
├── resources/theme.css # Tailwind CSS v4 entry point
├── views/              # optional Blade overrides (same paths as resources/views)
└── lang/               # optional JSON translation overrides (en.json, ar.json…)
{
    "slug": "my-theme",
    "name": "My Theme",
    "version": "1.0.0",
    "author": "Your name",
    "description": "A short description shown in the admin panel.",
    "parent": "pixel-forge",
    "screenshot": "screenshot.webp",
    "entries": ["resources/theme.css"],
    "supports": { "dark_mode": true, "light_mode": true, "rtl": true },
    "settings": [
        { "key": "accent", "type": "color", "label": "Accent colour", "default": "#146a4f", "css_var": "--ac-accent" }
    ]
}
  • parent (optional) inherits another theme's views, texts and artwork; override only what you change.
  • settings become form fields under Customise; values with css_var are written as CSS custom properties (colours and sizes are validated).
  • Views in views/ take precedence over the core views, so you can restyle any page or component.
  • Build the CSS with Node.js 20+: npm install once, then npm run build. Zip the folder (with the compiled assets) to install it on other sites.
11

SEO

SEO settings
SEO templates per page type and language.
  • Templates: Settings → SEO defines the title and description of every page type, per language, with placeholders: {site} {sep} {tagline} {title} {description} {excerpt} {count} {query} {year}. Games, categories, tags and pages can override them individually.
  • hreflang & canonical tags for every language, with Open Graph, Twitter cards and structured data (VideoGame, ItemList, BreadcrumbList, ProfilePage, WebSite search box, Organization).
  • Sitemaps: /sitemap.xml indexes per-language sitemaps for collections, categories, games (with images), tags and pages. It is referenced from robots.txt, which you can edit.
  • IndexNow: Bing, Yandex, Naver, Seznam and Yep are notified of new and changed pages instantly. Baidu link submission is supported too.
  • Verification & analytics: Google, Bing, Yandex, Baidu and Naver verification, Google Analytics, Google Tag Manager, Microsoft Clarity, Yandex Metrica and Baidu Tongji in Settings → Search engines & analytics. Anything else goes in Settings → Custom code.
  • Thin content control: keep search results, player profiles and tag pages with few games out of search engines.
12

Advertising

Create ad units in Monetization → Ad units with code from AdSense, Google Ad Manager or any network, and assign them to a placement. Several units can share a placement; the rotation weight decides how often each one shows. Units can target guests or members, devices and date ranges.

Ad units
Ad units with placement, audience, devices and click statistics.
PlacementPlacement
Header (all pages)Home · below the hero
Home · between sectionsListings · above the grid
Listings · in-feed cardGame page · above the player
Game page · below the playerGame page · sidebar
Game page · pre-roll overlayGame page · below the description
Footer (all pages)Mobile sticky anchor

In Settings → Advertising you can turn ads off globally, hide them from signed-in players or above a given level, enable a pre-roll before games start, set the in-feed frequency and publish your ads.txt file.

Ad-block guard

Visitors who block your ads can keep playing, but their progression stays frozen until they allow the ads: no XP, no level-ups, no playtime added to their counters, no new achievements and no reward event progress. Nothing they already earned is touched, and everything starts counting again as soon as the blocker is off. Players see a clear message (a dialog for members, a banner for guests) explaining what is frozen and how to turn their blocker off, a Frozen badge in the header and a reminder on the game player. The XP bar of their own account turns icy while it lasts.

The browser checks itself every few minutes, but the server decides: each check loads small first-party scripts addressed like ad scripts, which ad blockers stop, and each one answers with a receipt signed for the visitor's session. Progress counts only with fresh receipts and no other sign of blocking (hidden ad-like elements, unreachable ad networks), so editing the page script or blocking the check never unfreezes anybody. Daily visit bonuses wait until the check passes, and plays started while frozen are counted once the blocker is off.

SettingWhat it does
Freeze progress while an ad blocker is onTurns the guard on (default). It only applies while ads are on, and never to players who see no ads because of the member setting or the level perk.
Also check the ad networks your ads loadAlso catches browser shields and DNS blockers (Brave, strict tracking protection, Pi-hole, NextDNS) by checking that the scripts of your live ad units can load. Only scripts your server could reach itself are used, so a dead or mistyped address never freezes anybody, and while the cookie banner is on these checks wait for the visitor’s consent. Turn it off if many visitors live where your ad network is unavailable.
Extra ad network scripts to checkOptional https addresses (one per line), for example the script of an ad network you load through Custom code.

The settings page also shows how many play sessions of the last 7 days ran with an ad blocker. Game statistics keep counting every play, so popularity and trending stay accurate.

HostingThe checks use the addresses /prebid/…, /includes/ads/… and /content/ads/…. They have no file extension, so servers that serve .js files themselves still route them to Arcadify; do not add server rules that block these paths.
13

XP, levels & achievements

Players earn experience points (XP) and climb 100 levels grouped into tiers with 16 honor emblems. All values are adjustable in Settings → XP & gameplay:

ActionDefault XPDaily limit
Each minute of active play2240 minutes counted
Discovering a new game15150 XP
Daily visit10—
Streak bonus per consecutive day550 XP
Approved comment525 XP
Rating a game220 XP
Player achievements
Achievements in the player's account.
Wall of Fame
The Wall of Fame: this week, this month and all time.
  • Only real, active play counts: the game page reports a heartbeat while the tab is visible.
  • Achievements track 18 statistics: total plays, different games, minutes played, games in a category, daily streak, level reached, comments posted, likes received, games rated, favourites, achievements unlocked, account age, late-night, sunrise and weekend plays, Game of the Week plays, a completed profile and rewards claimed. Secret achievements stay hidden until unlocked.
  • Avatars: players choose one of 124 3D characters or upload a photo; legendary avatars unlock at higher levels.
  • Administrators can adjust a player's XP or wallet from Community → Players; every change is written to the activity log.
14

Reward events & prizes

Reward events turn playtime into prizes and give players a reason to come back every day. Run challenges where everyone who reaches a goal wins, or competitions where the best players of a period win by rank, and give away cash, game keys, gift cards, bonus XP, physical items or anything else you like. Turn the program on or off in Settings → Play & earn; when it is off, events, wallets and withdrawals disappear everywhere and existing balances are kept.

Rewards hub
The rewards hub: live events, prize pool, how it works and the latest winners.
Reward event page
An event page with its countdown, prizes, podium and live standings.

Two formats

FormatWho winsFor example
ChallengeEvery player who reaches the target while the event runs, or only the first players when you limit the number of winners.“Play 10 hours this month and win $5.”
CompetitionThe best ranks when the event ends. Each prize covers one rank or a range of ranks, such as ranks 4 to 10.“The 3 players who earn the most XP this week win game keys.”

What counts

  • Playtime: verified active play only; idle tabs do not count.
  • Experience (XP): XP earned during the event. Choose the sources that count; event prizes and manual adjustments are excluded by default.
  • Game sessions and different games: sessions that last at least the minimum length you set.
  • Custom score: your own formula with points per minute played, per XP, per session and per new game.

You can count only some categories or games, cap what counts per day so steady players can keep up with marathon players, and require a minimum score to win. Equal scores are ranked by who reached the score first.

Creating an event

Reward event builder
The event builder: prizes by rank, code pools, scoring and rules.
  1. Open Play & earn → Reward events → New. On Event, enter the title and description in each language, the dates, an optional image (the active theme's trophy artwork is used otherwise) and whether the event repeats every week or every month.
  2. On Format & scoring, choose a challenge or a competition, what counts, the target or minimum score, and any limits.
  3. On Prizes, add as many prizes as you like and, for a competition, the ranks each one covers. Paste game keys, gift card or voucher codes one per line: each winner receives one code, revealed only to them. Steam, Epic, GOG and Xbox keys get their store link automatically.
  4. On Rules & eligibility, decide whether players must join first, the maximum number of participants, the minimum level and account age, whether a verified e-mail is required, how many days winners have to claim, and your own rules text.

A repeating event starts its next edition automatically with the same prizes and rules. Unused codes carry over, while the codes still owed to winners who have not claimed yet stay reserved for them. Duplicate prepares a similar event in one click, and Publish the results ranks an ended competition right away (this also happens automatically a few minutes after it ends). Featured events lead the rewards hub and the header badge, and the Reward events section of the home page builder shows live events on your home page.

Prizes and deliveries

  • Cash is credited to the winner's wallet when they claim it, then withdrawn like any other balance.
  • Bonus XP is added to the winner's level progress at once.
  • Game keys, gift cards and custom rewards reveal a code from the pool. When the pool is empty, and for physical prizes, the claim waits in Play & earn → Prize deliveries: deliver it with a code or a message (a tracking number, for example) and the winner is notified. Codes you add to the pool later go to waiting winners automatically.
  • Winners are notified on the site and by e-mail and find everything in Account → My prizes. Unclaimed prizes expire after the claim period you set.
  • An event's Standings tab lets you disqualify players who broke the rules; its Winners tab lists every prize with its delivery status.

Wallets and withdrawals

Withdrawals
Payout requests: approve or reject in one click.
  1. Players request a withdrawal with one of the payout methods you enable (PayPal, Payoneer, bank transfer, USDT TRC20, or your own with custom fields).
  2. Review requests in Play & earn → Withdrawals: mark them paid with a payment reference, or reject them (the funds return to the player's wallet).

Settings include the currency, minimum withdrawal, fee percentage, verified e-mail requirement, open requests per player and the program terms shown on the rewards page. Turning wallets off hides cash prizes and pauses cash claims; events with other prizes keep running, and players keep the cash prizes they already won until wallets are back.

Your responsibilityPrizes and payments are provided by you, outside Arcadify. Make sure your events, terms and payouts comply with the laws of your country and of your players, and that you are allowed to give away the keys and items you offer.
15

Accounts, email & security

Player account settings
Account settings: profile, avatar, achievements, favourites, history, notifications, prizes, wallet and security.

Social sign-in

Google, Facebook, X (Twitter), Discord and GitHub sign-in are configured in Settings → Accounts & sign-in. Create an OAuth app in each developer console, paste the client ID and secret, and register the callback URL shown next to each provider. Secrets are stored encrypted.

Email

Settings → Email delivery supports SMTP (recommended), the server's sendmail, or writing emails to the log for testing. Use Send a test email to confirm delivery. Email verification can be required for withdrawals or for all players. Verification and password-reset emails are sent in the player's language.

Spam protection

  • CAPTCHA: Cloudflare Turnstile (free, usually invisible), Google reCAPTCHA or hCaptcha, per form (sign-up, sign-in, comments, contact).
  • Comment moderation: publish immediately, review each player's first comment, or review every comment. Blocked words, link limits and a minimum level to comment.
  • Rate limits protect sign-in, search, plays and comments automatically.

Privacy

Settings → Privacy & cookies shows a GDPR cookie banner; analytics only run after consent. Players can delete their account and personal data themselves.

Security by design

  • Security headers, CSRF protection and encrypted secrets. Game embed addresses must be https:// pages, so nothing else can run inside your site.
  • Image URLs are only fetched from public addresses (no internal network access), and uploads are re-encoded.
  • Updates and license certificates are verified with Ed25519 signatures before they are trusted.
16

Performance

  • Page cache: pages are cached for guests and served instantly; personal sections still load per visitor. Configure in Settings → Performance.
  • Search uses MySQL full-text indexes in every language (prefix matching, relevance ranking), with a fallback for scripts without word spacing.
  • Optimize for production in System health caches configuration, routes and views. Run it after changing .env.
  • Clear all caches after manual file changes.
  • Uploaded images are converted to WebP and resized automatically.
  • Keep APP_DEBUG=false in .env on a live site: debug mode can reveal private details in error pages.
17

Updating

With an active license, System → Updates lists new releases with their release notes (also published at ekr-portal.cloud/changelog). Click Install update:

Updates page
One-click updates with release notes.
  • The package's Ed25519 signature, checksum and every file hash are verified before anything changes.
  • The site switches to maintenance mode for a moment. Every changed file is backed up first and restored automatically if anything fails.
  • Database migrations run automatically and caches are cleared.

A database backup beforehand is still recommended. Your settings, translations made in the admin panel, uploads and installed themes are preserved.

Manual update

Releases that change PHP dependencies are delivered as a full package. To install a full package:

  1. Back up your files and database.
  2. Upload the new version over the old one, keeping .env, storage/, public/uploads/ and any theme you created.
  3. Open System health and click Clear all caches, or run php artisan migrate --force and php artisan optimize:clear.
18

Live demo mode

Running a public showcase for your clients? Demo mode turns a copy of Arcadify into a safe live demo: the storefront works exactly like a real site, while the admin panel can be explored but never changed.

  1. Add ARCADIFY_DEMO_MODE=true to .env. Optional: ARCADIFY_DEMO_MAINTAINERS=you@example.com for the accounts that keep full access, ARCADIFY_DEMO_PURCHASE_URL=… for the "Get Arcadify" button and ARCADIFY_DEMO_ACCOUNT_HOURS=24 for how long accounts created by visitors last (0 keeps them).
  2. Run php artisan arcadify:demo to create the demo administrator and player. The scheduler resets them every hour.
  3. The sign-in and sign-up pages now show Admin demo and Player demo buttons next to the normal forms.
AreaIn demo mode
StorefrontWorks like a real site for everyone: sign up, sign in, reset a password, play, react, comment, report, claim rewards, request payouts, edit your own profile, avatar and password, or delete your account.
Admin panelRead-only for everyone except the maintainers. Every screen and form opens; saving shows a "changes are disabled" popup and nothing is stored. Uploads and actions such as test e-mails, cache tools, license changes and updates are blocked. E-mail addresses, payout details and contact messages of real people are masked; the demo accounts and showcase records on example.com addresses stay visible.
Shared demo accountsTheir password, e-mail, profile, avatar and wallet cannot be changed, the accounts cannot be deleted and their passwords cannot be reset, so they work the same for every visitor. A notice on their settings pages offers a free account of one's own. They never receive e-mail or contact messages, and each visitor's language and theme choice stays in their own browser. Staff tools on the storefront, such as removing other members' comments, are read-only like the admin panel.
Hourly resetPuts the demo accounts back, removes the comments visitors posted with them and deletes accounts created by visitors once ARCADIFY_DEMO_ACCOUNT_HOURS have passed. Accounts created before demo mode was switched on are never touched.
Never on a real siteDemo mode makes the admin panel read-only for everyone except the maintainers you list. To show visitors' comments at once, set Settings → Comments → Publishing to Publish immediately.
19

Command line

Everything is available from the admin panel; these commands are for servers with SSH access.

CommandPurpose
php artisan arcadify:providers:sync {provider?} --limit=Import the newest games from one or all auto-sync providers
php artisan arcadify:catalog:import --chunk=1000Import a starter catalogue file, if you have one
php artisan arcadify:trendingRecalculate trending scores
php artisan arcadify:similarities --limit=250 | --allRefresh "similar games" recommendations
php artisan arcadify:rewardsPublish the results of ended reward events, start repeating editions and expire unclaimed prizes (runs every five minutes)
php artisan arcadify:index-nowSend pending IndexNow notifications
php artisan arcadify:themes:publishCopy compiled theme files to public/themes
php artisan arcadify:translations:scan --checkReport translation completeness per language
php artisan arcadify:license:refreshRenew the license certificate
php artisan arcadify:demoCreate or reset the live demo accounts and delete expired visitor accounts (demo mode only)
php artisan arcadify:pruneRemove expired sessions, old logs and statistics
20

Troubleshooting & FAQ

I see "500 Internal Server Error"

Check storage/logs/laravel-YYYY-MM-DD.log for the exact error. The most common causes are missing PHP extensions, an outdated PHP version, or folders that are not writable (storage, bootstrap/cache). If the log is empty, your host's error log (cPanel → Errors) usually shows an .htaccess problem: ask your host to enable mod_rewrite and AllowOverride All.

The site has no styles or images

Open System health and click Publish theme assets. Also make sure the hidden .htaccess files were uploaded.

"Page expired" (419) after a form submit

The session expired or cookies are blocked. Refresh and try again. If it happens constantly, make sure storage/framework/sessions is writable and the site address in Settings → General matches the address in the browser (including https and www).

License activation fails

See Activation messages. Activation needs outgoing HTTPS from your server to ekr-portal.cloud.

Emails are not delivered

Use SMTP credentials from your host or an email service, then Send a test email. Check the spam folder and that your domain has SPF/DKIM records.

New games are not imported every night

Check System health: it shows when the scheduler last ran. Add or fix the cron job and make sure nightly sync is enabled on each provider.

I forgot the administrator password

Use Forgot password? on the sign-in page. Without working email, an administrator with SSH access can run php artisan tinker and set a new password on the user.

Can I move the site to another domain?

Yes: deactivate the license on the old site, move files and database, update APP_URL in .env and the site address in Settings → General, clear all caches, then activate on the new domain.

21

Credits & licenses

Arcadify is built with these excellent open-source projects. Their licenses travel with the code in vendor/.

ProjectLicense
Laravel framework, Laravel SocialiteMIT
Filament (admin panel), LivewireMIT
spatie/laravel-settings, spatie/laravel-translatableMIT
Intervention Image, Symfony componentsMIT
paragonie/sodium_compat (signature verification fallback)ISC
Blade Icons, HeroiconsMIT
Alpine.js, Tailwind CSS, ViteMIT
Microsoft Fluent Emoji (3D icons and avatars)MIT
Lucide iconsISC
Simple Icons (sign-in brand marks; trademarks belong to their owners)CC0 1.0
Inter, Cairo, Outfit, Nunito, Rubik fontsSIL Open Font License 1.1

Games listed on your portal belong to their developers and distributors and are shown through the providers' official embed programs. Game names, thumbnails and descriptions come from the providers' feeds.

22

Changelog

1.1.0 · Reward events, competitions and the ad-block guard

  • Ad-block guard: visitors who block your ads keep playing, but their XP, level, playtime counters, achievements and reward progress stay frozen until they allow the ads, with a clear message, a Frozen badge and a reminder on the game player. Server-verified checks (signed receipts) catch extensions, hidden ad slots, browser shields and DNS blockers. On by default in Settings → Advertising; players who see no ads are never affected.
  • Reward events rebuilt: challenges and ranked competitions over any period, scored by playtime, XP, game sessions, different games or your own formula.
  • Any mix of prizes per event: cash, game keys with code pools (Steam, Epic, GOG, Xbox, PlayStation and more), gift cards, bonus XP, physical and custom rewards, for one rank or a range of ranks.
  • Flexible rules: sign-up or automatic entry, participant and winner limits, minimum level, account age and verified e-mail, daily caps, game and category filters, a minimum winning score, tie-breaks, claim deadlines and weekly or monthly repeats.
  • New rewards hub and event pages with live standings, an animated podium, countdowns and winner announcements, with new artwork in all seven themes.
  • My prizes in the player account, on-site and e-mail notifications, and a Prize deliveries inbox for keys and items to hand over.
  • A Reward events section for the home page, and the featured event in the header badge.
  • Turning wallets off now pauses cash prizes instead of hiding the whole rewards program.

Existing reward events and their winners are converted automatically. The update adds tables for prizes, codes and awards.

1.0.1 · Live demo and admin improvements

  • Live demo mode: visitors can now create their own accounts and use every storefront feature; the admin panel stays fully read-only.
  • Live demo mode: the shared demo accounts keep their password, e-mail, profile, avatar and wallet, and cannot be deleted or reset by visitors.
  • Live demo mode: personal details of real people are masked in the admin panel, and accounts created by visitors are deleted automatically (ARCADIFY_DEMO_ACCOUNT_HOURS).
  • Fixed: the role and status chosen in Players → Edit were not saved.
  • Deleting an account now also updates the comment, like, favorite, rating and achievement counters.

Update with one click in System → Updates, or upload the full package as described in Updating. The update adds one database column.

1.0.0 · Initial release

  • HTML5 arcade storefront with seven themes, light and dark modes, and full right-to-left support.
  • Import center for six providers with nightly sync and revenue-share parameters.
  • 100 levels with 16 honor emblems, 53 achievements, 124 avatars and the Wall of Fame.
  • Play & earn: reward events, wallets and withdrawals.
  • Six complete languages, machine translation and a translation editor.
  • SEO templates, sitemaps, hreflang, structured data and IndexNow.
  • Ad units for 12 placements, pre-roll ads and ads.txt.
  • One-click installer, EKR license activation and signed one-click updates.
  • Live demo mode for public showcases.
23

Support

Before contacting support, please check Troubleshooting and System health. Open a ticket from your account at ekr-portal.cloud/support or through the marketplace item page, and include your purchase code or license key, your site address, the PHP version and the relevant lines from storage/logs.

Arcadify 1.1.0 · Documentation · © EKR