The Eternal Wall is a production-ready WordPress plugin (packaged as eternal-wall-v2.0.0.zip, plugin slug eternal-wall, version EW_VERSION 2.0.0) that powers a pay-to-enter digital monument. Visitors pay to inscribe their name permanently onto a 2D interactive stone wall. The wall is sealed: the full wall is accessible only to logged-in users who hold at least one paid, permanent inscription (and to administrators). Visitors see a blurred teaser wall and a live counter of carved names.
The product's intent is to monetize digital inscriptions on a 2D monument with server-enforced permanence, deliver a secure payment experience through Chargily Pay v2 for Algerian CIB and EDAHABIA cardholders, uphold inscription immutability at both the application and database levels, and provide a rich, interactive, access-controlled frontend wall viewing and inscription experience.
The audience is memorial-minded contributors in Algeria who wish to carve a name forever, and the administrators who run a sealed, access-controlled WordPress site. The emotional register is ceremonial, solemn, weighty, and premium — a name carved forever, not a social post.
The plugin is delivered as a WordPress plugin ZIP with PHP 7.4+ compatibility, using the EW_ / ew_ prefix throughout. It is installed into an existing WordPress site and rendered through the [eternal_wall] shortcode.
The Eternal Wall is a self-contained WordPress plugin. It registers custom database tables, a REST API namespace (/wp-json/eternal-wall/v1/), an admin menu, scoped public assets, and a shortcode dispatcher. All product behavior is delivered through the plugin; the surrounding WordPress theme is not modified, and all frontend styling is scoped to .ew-root to avoid theme collisions.
Actors
Non-persona actors
Accepted behavior summary
BEFORE UPDATE / BEFORE DELETE triggers plus PHP model guards.EW_Payment_Gateway interface so other providers can be added later.Narrow exclusions
uninstall.php must never drop the inscriptions table.The Eternal Wall is delivered as a WordPress plugin that owns its own custom pages, rendered through the [eternal_wall] shortcode and the plugin's templates. The plugin owns application identity through native WordPress sign-up/login plus Google OAuth, and it owns the sealed-wall access rule: the full wall is available only to logged-in users with at least one confirmed paid permanent inscription, and to administrators.
Payment is provider-owned. The plugin never stores card data and never hardcodes secret keys. Checkout is created server-side against Chargily Pay v2 and the customer completes payment on Chargily's hosted surface. Finalization is zero-trust: the plugin verifies the HMAC-SHA256 signature header on the webhook, then independently fetches checkout status directly from the Chargily API before idempotently finalizing the inscription and assigning its sequential number.
Current delivery covers the landing teaser, authentication, the sealed gatekeeper message, the carve room, the interactive wall, and the three admin surfaces (Dashboard, Settings, Inscriptions). Future expansion of additional payment providers is anticipated through the abstract EW_Payment_Gateway interface, but no additional provider is part of current delivery.
Not applicable. No reference directive in this project declares content_source; the Chargily Pay v2 reference is used only as feature_reference and domain_context.
#1E2533 stone-gray, a few premium slabs in burnished gold #D4AF37 with a glowing bevel, all under a heavy 14px blur. Over the lower third, an oversized Cinzel counter numeral reading the live inscription count, with a thin gold rule beneath it and the label SOULS INSCRIBED. Bottom-left: a ruled specification panel with BASE $1.00 USD / 10 CHARACTERS, PREMIUM +$20.00, CHARGED IN DZD. Bottom-right: a single gold-bordered CTA PAY TO ENTER.PAY TO ENTER CTA leading into the auth/carve flow./count endpoint.templates/landing.php renders the teaser wall, counter, and CTA; public/js/eternal-wall-canvas.js renders the tiled slab grid; the counter gauge polls /count; public/css/eternal-wall.css supplies the scoped .ew-root dark stone and gold theme.0, teaser wall shows the empty stone field); success (counter settles on the live number); error (counter fetch fails — the gauge holds its last known value and the CTA remains available); recovery (counter retries on the next poll interval).templates/auth.php renders the tabs and OAuth button; includes/class-ew-auth.php handles native sign-up/login and Google OAuth; includes/class-ew-security.php supplies nonces and rate limits.templates/sealed.php renders the gatekeeper message; includes/class-ew-security.php can_view_wall determines when this template is shown.CHARACTERS 34/100, PREMIUM OFF, TOTAL 4.00 USD / 540.00 DZD) with 1px gold hairlines between rows, updating live as the textarea changes. Collapses to a single column at 768px.Pay & Carve Forever.templates/carve.php renders the workshop; public/js/eternal-wall-carve.js handles the live slab preview, grapheme counter, and checkout initiation; includes/class-ew-pricing.php computes the server quote and grapheme count; includes/class-ew-payments.php verifies the quote and orchestrates checkout; includes/class-ew-chargily.php calls Chargily POST /checkouts with a Bearer token and returns the checkout URL.CHARACTERS 0/100, TOTAL 0.00 USD / 0.00 DZD, Pay & Carve Forever disabled); success (checkout URL returned, customer redirected to Chargily); error (grapheme count exceeds 100, permanence agreement unchecked, quote mismatch, Chargily error — inline message, form preserved); recovery (correct the input and resubmit; retry checkout creation).Carve Again top-bar button is present.#number with auto-pan to the slab's coordinates; press Carve Again.templates/wall.php renders the canvas and HUD; public/js/eternal-wall-canvas.js handles zoom/pan and viewport culling; public/js/eternal-wall-search.js handles search by text or #number with auto-pan; includes/class-ew-inscriptions.php supplies viewport queries; includes/class-ew-rest-api.php exposes /wall.admin/class-ew-admin-dashboard.php renders the stats and connection tester; admin/class-ew-admin.php supplies the admin menu and assets.admin/class-ew-admin-settings.php renders the form with masked secret keys; includes/class-ew-settings.php stores the options.admin/class-ew-admin-inscriptions.php renders the read-only browser.As a site owner, I should receive a complete, production-ready WordPress plugin ZIP named eternal-wall-v2.0.0.zip with plugin slug eternal-wall, PHP 7.4+ compatibility, and EW_ / ew_ prefixes, so that I can install and activate it on my WordPress site.
[eternal_wall].As a site owner, I should have the plugin organized into the specified file structure, so that the codebase is maintainable and matches the documented layout.
eternal-wall.php, uninstall.php, readme.txt, and the includes/, admin/, public/, and templates/ directories with their specified files; failure = missing file surfaced at activation; continuation = configure Settings.As a site owner, I should have eternal-wall.php carry the plugin header, the EW_VERSION 2.0.0 constant, and activation/deactivation hooks, so that WordPress recognizes and bootstraps the plugin.
EW_VERSION is defined; failure = header parse error; continuation = configure Settings.EW_VERSION equals 2.0.0 and activation/deactivation hooks run.As a site owner, I should have uninstall.php perform a safe uninstall that never drops the inscriptions table, so that permanent inscriptions survive plugin removal.
wp_eternal_wall_inscriptions still exists with its rows.As a site owner, I should have readme.txt provide the setup guide and shortcode instructions, so that I can configure and embed the wall.
[eternal_wall] usage are documented; failure = missing readme; continuation = follow the guide.readme.txt documents setup and the shortcode.As a site owner, I should have includes/class-ew-plugin.php act as the singleton bootstrap, so that the plugin initializes once and wires its components.
As an administrator, I should have includes/class-ew-settings.php store the Chargily keys, test mode, DZD rate, and Google OAuth options, so that I can configure the plugin.
As a Carver, I should have includes/class-ew-pricing.php compute the server quote and grapheme count, so that pricing is server-authoritative.
As an administrator, I should have includes/class-ew-security.php provide nonces, rate limits, and the can_view_wall access check, so that key actions and payments are protected from abuse.
can_view_wall gates the full wall; failure = request rejected; continuation = retry within limits.As a site owner, I should have includes/class-ew-database.php create the tables via dbDelta and install the immutability triggers, so that the schema and permanence enforcement exist.
wp_eternal_wall_inscriptions, wp_eternal_wall_events, ew_no_update, and ew_no_delete exist.As a Carver, I should have includes/class-ew-inscriptions.php model inscriptions with 2D coordinates and viewport queries, so that the wall can render and search slabs.
As a site owner, I should have includes/class-ew-payment-gateway.php define the abstract EW_Payment_Gateway interface, so that other providers can be added later.
EW_Chargily; failure = interface error; continuation = add a provider later.EW_Chargily implements EW_Payment_Gateway.As a Carver, I should have includes/class-ew-chargily.php implement Chargily Pay v2, so that checkout and status verification work against the provider.
POST /checkouts is called with a Bearer token and status is fetched directly from the Chargily API.As a Carver, I should have includes/class-ew-payments.php verify the quote and orchestrate checkout, so that the pending record and checkout are created consistently.
Pay & Carve Forever; observable result = a pending record is created and a checkout URL is returned; failure = quote mismatch or provider error; continuation = retry.As a site owner, I should have includes/class-ew-webhooks.php receive webhooks with replay protection, so that repeated or corrupt calls are rejected.
wp_eternal_wall_events and processed once; failure = signature mismatch or replay rejected; continuation = provider retry.event_id values are rejected.As a Visitor, I should have includes/class-ew-auth.php provide native WordPress sign-up/login plus Google OAuth, so that I can establish or resume my application identity.
As a Carver, I should have includes/class-ew-rest-api.php expose /count, /me, /wall, /checkout, and /webhook/chargily, so that the frontend and provider can interact with the plugin.
/wp-json/eternal-wall/v1/.As a Visitor, I should have includes/class-ew-shortcode.php dispatch the [eternal_wall] shortcode, so that the correct template renders for my state.
As an administrator, I should have admin/class-ew-admin.php register the admin menu and assets, so that the admin surfaces are reachable.
As an administrator, I should have admin/class-ew-admin-dashboard.php show counter stats and a connection tester, so that I can monitor the monument and verify Chargily connectivity.
As an administrator, I should have admin/class-ew-admin-inscriptions.php provide a read-only inscription browser with no delete action, so that I can inspect records without violating permanence.
As an administrator, I should have admin/class-ew-admin-settings.php render the settings form with masked secret keys, so that I can configure the plugin without exposing secrets.
As a Visitor, I should have public/css/eternal-wall.css scope the dark stone and gold theme to .ew-root, so that the theme does not collide with my site.
.ew-root; failure = style leak; continuation = navigate..ew-root.As a Carver, I should have public/js/eternal-wall-canvas.js render a 2D zoom/pan stone canvas with viewport culling, so that the wall stays performant.
As a Carver, I should have public/js/eternal-wall-carve.js provide the live stone slab preview, grapheme counter, and checkout, so that I can compose and pay.
Pay & Carve Forever; observable result = the preview and counter update live and checkout initiates; failure = checkout error; continuation = retry.As a Carver, I should have public/js/eternal-wall-search.js search by text or #number with auto-pan to coordinates, so that I can find a slab.
As a Visitor, I should have templates/landing.php render the ghost teaser wall, counter, and Pay to Enter CTA, so that I can see the monument and decide to enter.
Pay to Enter.As a Visitor, I should have templates/auth.php render login/register tabs plus a Google OAuth button, so that I can establish identity.
As a Carver, I should have templates/carve.php render the carving workshop, slab preview, and spot picker, so that I can compose my inscription.
As a Carver, I should have templates/wall.php render the interactive 2D pannable wall, so that I can browse the monument.
templates/sealed.php render the "The wall is sealed" gatekeeper message, so that I understand why the full wall is unavailable.
As a Visitor, I should see a blurred teaser wall and a live counter of carved names, so that I can see the monument without accessing the full wall.
Pay to Enter.As a Carver, I should have the full wall accessible only when I am logged in with at least one paid, permanent inscription, so that the wall stays sealed.
can_view_wall returns true only for eligible users.As an Administrator, I should have the full wall accessible to me, so that I can view the monument.
can_view_wall returns true for administrators.As a site owner, I should have confirmed inscriptions that can never be edited, updated, or deleted by anyone, including admins, so that permanence is absolute.
Permanent inscriptions cannot be modified or deleted.; continuation = none — the inscription remains unchanged.ew_no_update and ew_no_delete raise SQLSTATE '45000' when OLD.status = 'confirmed', and PHP model guards reject the same attempts.As a Carver, I should be able to purchase additional inscriptions anytime, so that I can carve again.
Carve Again; observable result = the carve room opens and a new pending inscription can be created; failure = checkout error; continuation = retry.As a Carver, I should be charged $1.00 USD per 10 characters rounded up (1–10 chars = $1, 11–20 = $2 … 91–100 = $10), so that pricing is predictable.
As a Carver, I should have a maximum of 100 characters per inscription, so that slabs stay bounded.
As a Carver, I should have emojis and composite symbols count as 1 character, so that grapheme counting is fair.
grapheme_strlen counts them as 1, with a PCRE \X fallback; failure = fallback used when grapheme_strlen is unavailable; continuation = checkout.As a Carver, I should have an optional +$20 USD premium upgrade (burnished gold slab, double width, glowing border), so that I can distinguish my inscription.
As a Carver, I should have the price stored in USD and charged in DZD using an admin-configurable rate (default 135 DZD/USD), so that I pay in Algerian Dinar.
As a Carver, I should pay via Chargily Pay v2 supporting Algerian CIB and EDAHABIA cards, so that I can pay with my local card.
Pay & Carve Forever; observable result = the Chargily checkout page opens and accepts CIB or EDAHABIA; failure = provider error; continuation = retry.As a site owner, I should have secret keys never hardcoded, so that credentials stay secure.
As a site owner, I should have the Chargily endpoints https://pay.chargily.net/api/v2 (live) and /test/api/v2 (test), so that I can switch between live and test modes.
As a Carver, I should have the frontend select text, coordinates, and premium, then the server quote the price and create a pending record, then the server call Chargily POST /checkouts with a Bearer token and return the checkout URL, so that checkout is server-authoritative.
Pay & Carve Forever; observable result = a pending record is created and the checkout URL is returned; failure = quote mismatch or provider error; continuation = complete payment on Chargily.As a site owner, I should have the webhook at /wp-json/eternal-wall/v1/webhook/chargily verify the HMAC-SHA256 signature header using the webhook secret, so that only authentic webhooks are processed.
As a site owner, I should have the webhook zero-trust fetch the checkout status directly from the Chargily API, so that no silent success occurs.
As a Carver, I should have my inscription idempotently finalized and assigned a sequential number when status=paid, so that my inscription is confirmed exactly once.
status=paid; observable result = the inscription is finalized and assigned the next sequential number; failure = duplicate event rejected; continuation = view the wall.As a site owner, I should have the abstract EW_Payment_Gateway interface so that other providers can be added later, so that the payment layer is extensible.
EW_Chargily; failure = interface error; continuation = add a provider later.EW_Chargily implements EW_Payment_Gateway.As a site owner, I should have the wp_eternal_wall_inscriptions table with the specified columns, so that inscriptions are stored correctly.
id (BIGINT UNSIGNED AUTO_INCREMENT PK), number (BIGINT UNSIGNED UNIQUE NULLABLE), user_id (BIGINT UNSIGNED), content (VARCHAR(191)), char_count (INT UNSIGNED), is_premium (TINYINT(1) DEFAULT 0), status (VARCHAR(20) DEFAULT 'pending'), coord_x (INT), coord_y (INT), amount_dzd (DECIMAL(10,2)), amount_usd (DECIMAL(10,2)), gateway (VARCHAR(50) DEFAULT 'chargily'), payment_ref (VARCHAR(191) UNIQUE), created_at (DATETIME), confirmed_at (DATETIME NULL); failure = schema error; continuation = configure Settings.As a site owner, I should have the wp_eternal_wall_events table with the specified columns, so that webhook events are deduplicated.
id, event_id (UNIQUE), gateway, payload (LONGTEXT), processed_at (DATETIME); failure = schema error; continuation = configure Settings.As a site owner, I should have the ew_no_delete and ew_no_update triggers on wp_eternal_wall_inscriptions that raise SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Permanent inscriptions cannot be modified or deleted.' when OLD.status = 'confirmed', so that permanence is enforced at the database level.
As a Carver, I should have my sequential number assigned only on confirmation, so that numbers reflect confirmed inscriptions.
status=paid; observable result = number is assigned at confirmation; failure = duplicate event rejected; continuation = view the wall.number is NULL until confirmation.As a Visitor, I should see a monumental hero, a live counter of inscribed souls, a blurred teaser wall, and a Pay to Enter button on the landing page, so that I can see the monument and decide to enter.
Pay to Enter.As a Carver, I should have a textarea (1–100 graphemes), a real-time chiseled stone preview, a premium toggle, a 2D coordinate spot picker, a live DZD/USD price, a permanence agreement checkbox, and a Pay & Carve Forever button in the carve room, so that I can compose and pay.
Pay & Carve Forever.As a Carver, I should have a full 2D canvas with drag-to-pan, pinch/scroll zoom, viewport culling, a search box that auto-pans to a slab, regular slabs as dark stone, premium slabs as gold double-width with glow, and a Carve Again top-bar button, so that I can browse and carve again.
.ew-root with the specified colors and fonts, so that the monument's look is consistent and isolated.
#0B0E14, #121721), stone gray (#1E2533, #2A3447), burnished gold (#D4AF37, #F3E5AB, #996515), monumental serif headings (Cinzel/Spectral), and a clean sans-serif body; failure = style leak; continuation = navigate..ew-root.The Visitor is an unauthenticated or unpaid person who arrives at the monument. Their product context is the landing page: a monumental hero where the wall itself is the hero, a tiled grid of carved stone slabs under a heavy blur, with a live counter of inscribed souls and a ruled specification panel stating BASE $1.00 USD / 10 CHARACTERS, PREMIUM +$20.00, and CHARGED IN DZD.
Their primary goal is to see the monument, understand what it costs to enter, and decide whether to pay to carve a name. Their distinct accepted responsibilities are: viewing the blurred teaser wall, reading the live counter of carved names, and pressing Pay to Enter to begin the entry flow. Their relevant inputs are the cursor position (which drives the 120px blur-lens that briefly reveals sharp slabs) and the decision to enter. Their interactions with other accepted participants are indirect: pressing Pay to Enter leads them into the auth flow, where they become a Carver once identity is established and an inscription is confirmed. Their observable success is reaching the auth/carve flow to purchase an inscription.
What makes the Visitor's work different is that they never see the full wall and never compose an inscription; their entire experience is the teaser, the counter, and the decision to enter. They are the only persona who interacts with the monument without an established identity.
The Carver is a logged-in user with at least one paid permanent inscription. Their product context is the carve room and the wall: a two-column split with a chiseled slab preview on the left and a ruled specification panel on the right, and an edge-to-edge 2D canvas with floating instrument HUD panels.
Their primary goal is to compose 1–100 graphemes of text, preview the chiseled stone slab, optionally toggle the premium gold upgrade, pick 2D coordinates, accept the permanence agreement, and pay in DZD via Chargily. Their distinct accepted responsibilities are: composing text within the 1–100 grapheme limit, previewing the slab, toggling premium, picking coordinates, accepting the permanence agreement, pressing Pay & Carve Forever, returning to carve additional inscriptions, and searching the wall by text or #number with auto-pan. Their relevant inputs are the text, the premium toggle, the coordinates, and the permanence agreement. Their interactions with other accepted participants are: they establish identity through the auth flow (as a Visitor), they pay through Chargily Pay v2 (a provider), and their confirmed inscription becomes visible to other Carvers and Administrators on the wall. Their observable success is a confirmed inscription with a sequential number, rendered as a slab on the wall.
What makes the Carver's work different is that they are the only persona who composes and pays for inscriptions, and the only persona whose actions create permanent, immutable records. Their experience is defined by the permanence agreement and the one-way nature of confirmation.
The Administrator is a WordPress admin. Their product context is the WordPress admin shell with three plugin surfaces: Dashboard, Settings, and Inscriptions.
Their primary goal is to configure the plugin, monitor the monument, and inspect records without violating permanence. Their distinct accepted responsibilities are: configuring Chargily keys, test mode, the DZD/USD rate, and Google OAuth; monitoring counter stats and running the Chargily connection test; and browsing inscriptions read-only with no delete action. Their relevant inputs are the Chargily keys, the webhook secret, the test mode flag, the DZD/USD rate, and the Google OAuth credentials. Their interactions with other accepted participants are: they configure the payment and identity paths that Carvers and Visitors depend on, and they can view the sealed wall alongside Carvers. Their observable success is a configured plugin with a passing connection test and a readable inscription record.
What makes the Administrator's work different is that they hold configuration authority but not content authority: they can view the sealed wall and browse inscriptions, but they cannot edit or delete confirmed inscriptions. Their experience is defined by the tension between administrative control and enforced permanence.
[eternal_wall] shortcode.templates/landing.php because the Visitor is not logged in and holds no confirmed inscription.#1E2533 stone-gray, a few premium slabs in burnished gold #D4AF37 with a glowing bevel, all under a heavy 14px blur.SOULS INSCRIBED — and the ruled specification panel stating BASE $1.00 USD / 10 CHARACTERS, PREMIUM +$20.00, and CHARGED IN DZD.PAY TO ENTER.templates/auth.php).templates/auth.php from the landing CTA.includes/class-ew-auth.php handles native WordPress sign-up or login, with nonces and rate limits supplied by includes/class-ew-security.php.includes/class-ew-auth.php completes the OAuth exchange and establishes the application identity.templates/carve.php with an established identity.public/js/eternal-wall-carve.js updates the real-time chiseled stone preview and the live grapheme counter.CHARACTERS 34/100, PREMIUM OFF, TOTAL 4.00 USD / 540.00 DZD, with 1px gold hairlines between rows, updating live as the textarea changes.Pay & Carve Forever.wp_eternal_wall_inscriptions with status = 'pending'.POST /checkouts with a Bearer token and returns the checkout URL./wp-json/eternal-wall/v1/webhook/chargily.includes/class-ew-webhooks.php verifies the HMAC-SHA256 signature header using the webhook secret.wp_eternal_wall_events with its event_id, gateway, payload, and processed_at, rejecting duplicate event_id values for replay protection.status=paid, the plugin idempotently finalizes the inscription: status becomes confirmed, confirmed_at is set, and the next sequential number is assigned.includes/class-ew-security.php can_view_wall confirms the Carver holds at least one confirmed paid permanent inscription.templates/wall.php renders the edge-to-edge 2D canvas with floating instrument HUD panels pinned to the corners and a persistent top instrument bar holding the wordmark, the gauge counter, and a search field.public/js/eternal-wall-canvas.js renders only visible slabs through viewport culling.#number into the search field; public/js/eternal-wall-search.js auto-pans the canvas to that slab and pulses its bevel gold for 1.2s.Carve Again to return to Flow 3, or continues browsing.Carve Again in the wall's top instrument bar.templates/carve.php.includes/class-ew-security.php can_view_wall returns false.templates/sealed.php renders the "The wall is sealed" gatekeeper message explaining why the full wall is unavailable and what is required to enter.admin/class-ew-admin-settings.php renders the settings form with masked secret keys.includes/class-ew-settings.php persists the options.admin/class-ew-admin-dashboard.php renders the counter statistics.admin/class-ew-admin-inscriptions.php renders the read-only inscription browser with no delete action.includes/class-ew-security.php can_view_wall returns true for administrators.templates/wall.php renders the full 2D canvas.Permanent inscriptions cannot be modified or deleted.The creative direction is Precision instrument gravitas for a digital monument, with the muse MARQ by Garmin (luxury instrument aesthetic). The headline read: a WordPress plugin powering a pay-to-carve digital monument — a stone-and-gold wall where Algerian users pay in DZD via Chargily Pay to inscribe their name permanently. The emotional register is ceremonial, solemn, weighty, and premium.
| Role | Hex | Usage |
|---|---|---|
| Background | #0B0E14 | Deep obsidian — the void behind the wall |
| Surface | #121721 | Raised slab surface and panel ground |
| Text | #F3E5AB | Parchment gold — readable text on obsidian (contrast > 12:1) |
| Primary | #D4AF37 | Burnished gold — reserved for premium slabs, sequential inscription numbers, the live counter, and the single primary CTA; never for body text |
| Accent | #996515 | Pressed/engraved shadow tone for chiseled edges |
| Muted | #2A3447 | Stone-gray slab fills and hairline rules |
| Stone gray (fill) | #1E2533 | Regular slab fill |
| Stone gray (rule) | #2A3447 | Hairline rules |
No blue, indigo, or violet anywhere.
0.08em tracking for monumental headings and the inscription counter; weight 600–700 at very large scale.#1, #2, #1,284).0.14em tracking (STATUS, PREMIUM, DZD/USD).| Step | Size |
|---|---|
| Micro-label | 14px |
| Body | 18px |
| Lead | 24px |
| Subhead | 32px |
| Section | 44px |
| Monument display | clamp(56px, 9vw, 128px) |
| Counter numeral | clamp(72px, 14vw, 180px) |
Instrument-grade geometry: hard-edged rectangular stone slabs with 2px chisel bevels, circular gauge bezels for the live counter, ruled data rows with 1px gold hairlines, and concentric ring motifs echoing a watch dial. No soft pill radii on primary surfaces — corners are cut, not rounded; only controls receive a 3px radius.
Strict modular grid with a persistent top instrument bar (wordmark left, live counter centre as a gauge, Carve Again + account right). Landing stacks a full-bleed teaser wall behind a ruled overlay panel. The carve room is a two-column split — chiseled slab preview on the left, ruled specification panel on the right — collapsing to a single column at 768px. Wall view is edge-to-edge canvas with floating instrument HUD panels pinned to the corners.
Macro stone and metal textures: basalt grain, chisel marks, brushed gold leaf edges, and topographic contour lines as background engraving. Slabs are rendered as dimensional CSS plates with bevel highlights, not flat rectangles. No stock photography of people, no clip art, no gradient blobs.
The public entry is a full-viewport dark obsidian field where the wall itself is the hero. A tiled grid of carved stone slabs fills the viewport — most in #1E2533 stone-gray, a few premium slabs in burnished gold #D4AF37 with a glowing bevel — all under a heavy 14px blur. The visitor's cursor carries a 120px circular lens that briefly unblurs the slabs beneath it, so visitors can glimpse names without ever reading the full wall.
Over the lower third, an oversized Cinzel counter numeral — clamp(72px, 14vw, 180px) — reads the live inscription count, with a thin gold rule beneath it and the label SOULS INSCRIBED. The counter is rendered as a circular instrument gauge: the inscription number sits inside concentric gold bezel rings, with a needle that sweeps and settles each time a new name is confirmed via the REST /count endpoint.
Bottom-left, a ruled specification panel states BASE $1.00 USD / 10 CHARACTERS, PREMIUM +$20.00, and CHARGED IN DZD. Bottom-right, a single gold-bordered CTA reads PAY TO ENTER. The composition is asymmetric, weighted to the counter, and could not be mistaken for a SaaS hero.
The concept recomposes only accepted content, states, and controls: the teaser wall, the live counter, the specification panel, and the Pay to Enter CTA. It introduces no new behavior, page, or destination.
Interaction Model: Animated Motion Tempo: cinematic Hero Dimensionality: dimensional_css
/count endpoint.PAY TO ENTER CTA bottom-right.prefers-reduced-motion, the blur-lens is disabled and the teaser wall renders at its full 14px blur; the counter gauge renders at its settled value without the needle sweep; the ruled panels render fully revealed without the 400ms ease-out; the gold hairlines render fully drawn without the scroll draw-in; the parallax between the teaser wall layer and its overlay is removed. All readable text and controls remain whole and inside the viewport at 375px, 768px, and 1280px.PHP 7.4+ compatibility — the plugin must run on PHP 7.4 and above, using the EW_ / ew_ prefix throughout. Provenance: explicit. Rationale: the source specifies PHP 7.4+ compatibility and the prefix convention.
Server-authoritative pricing — the server quotes the price and creates the pending record; the client never determines the charge. Provenance: explicit. Rationale: the source specifies server-authoritative pricing.
Zero-trust payment verification — the webhook verifies the HMAC-SHA256 signature header with the webhook secret and fetches checkout status directly from the Chargily API before finalizing. Provenance: explicit. Rationale: the source specifies zero-trust verification.
Idempotent finalization — repeated webhooks must not create duplicate confirmations or sequential numbers. Provenance: explicit. Rationale: the source specifies idempotent finalization.
Replay protection — repeated or corrupt webhook calls are rejected via the event_id uniqueness in wp_eternal_wall_events. Provenance: explicit. Rationale: the source specifies replay protection.
Immutability enforcement — confirmed inscriptions are protected by MySQL BEFORE UPDATE / BEFORE DELETE triggers plus PHP model guards. Provenance: explicit. Rationale: the source specifies dual-layer permanence enforcement.
Safe uninstall — uninstall.php must never drop the inscriptions table. Provenance: explicit. Rationale: the source specifies safe uninstall.
Secret key handling — secret keys must not be hardcoded and must be masked in the admin settings form. Provenance: explicit. Rationale: the source specifies no hardcoded secret keys and masked secret keys.
Nonces and rate limits — key actions and payments are protected from abuse. Provenance: explicit. Rationale: the source specifies nonces and rate limits.
Access control — the full wall is accessible only to logged-in users with at least one paid, permanent inscription, and to admins. Provenance: explicit. Rationale: the source specifies the sealed wall rule.
Read-only admin inscription browser — no delete action is present. Provenance: explicit. Rationale: the source specifies a read-only browser with no delete action.
Scoped styling — all styles are scoped to .ew-root to avoid theme collisions. Provenance: explicit. Rationale: the source specifies scoped styling.
Accessibility — all visitor-facing components meet contrast and readability standards; readable text and controls stay whole at every viewport (375px, 768px, 1280px), wrapping or scaling to fit, and no other element covers any part of them. Provenance: explicit (reference directive) and creative direction. Rationale: the source specifies accessibility and the creative direction specifies readable text and controls stay whole.
Viewport culling — only visible slabs are rendered on the 2D canvas. Provenance: explicit. Rationale: the source specifies viewport culling for performance.
Grapheme counting — grapheme_strlen with a PCRE \X fallback counts emojis and composite symbols as 1 character. Provenance: explicit. Rationale: the source specifies grapheme-aware counting.
EW_ / ew_ prefix.wp_eternal_wall_inscriptions and wp_eternal_wall_events created via dbDelta, plus the ew_no_update and ew_no_delete triggers.includes/ — EW_Plugin, EW_Settings, EW_Pricing, EW_Security, EW_Database, EW_Inscriptions, EW_Payment_Gateway, EW_Chargily, EW_Payments, EW_Webhooks, EW_Auth, EW_REST_API, EW_Shortcode.admin/ — EW_Admin, EW_Admin_Dashboard, EW_Admin_Inscriptions, EW_Admin_Settings.public/js/ — eternal-wall-canvas.js, eternal-wall-carve.js, eternal-wall-search.js — plus scoped CSS at public/css/eternal-wall.css.templates/ — landing.php, auth.php, carve.php, wall.php, sealed.php.https://pay.chargily.net/api/v2, test endpoint /test/api/v2, POST /checkouts with a Bearer token, HMAC-SHA256 signature header verification on webhooks./wp-json/eternal-wall/v1/ with /count, /me, /wall, /checkout, and /webhook/chargily.dbDelta and triggers. [Assumption — not specified by user][Assumption — required_inference][Assumption — required_inference][Assumption — explicit default][eternal_wall] shortcode embedded in a WordPress page. [Assumption — explicit]BEFORE UPDATE / BEFORE DELETE triggers plus PHP model guards. Provenance: explicit.uninstall.php must never drop the inscriptions table. Provenance: explicit.signature header with the webhook secret and fetch checkout status directly from the Chargily API. Provenance: explicit.EW_ / ew_. Provenance: explicit..ew-root to avoid theme collisions. Provenance: explicit.grapheme_strlen and a PCRE \X fallback; emojis and composite symbols count as 1.number assigned to an inscription only on confirmation (#1, #2, …).status = 'pending', created before checkout.status = 'confirmed', immutable and numbered.status = 'failed'.event_id uniqueness.EW_Payment_Gateway — the abstract PHP interface implemented by EW_Chargily, allowing other providers to be added later.can_view_wall — the access check in EW_Security that gates the full wall.ew_no_update / ew_no_delete — the MySQL triggers that block updates and deletes on confirmed inscriptions.[eternal_wall] — the shortcode that dispatches the plugin's templates.
Live instrument readout
Souls Inscribed
Priced in USD, settled in Algerian Dinars at checkout. Confirmed inscriptions are permanent.

Live instrument readout
Souls Inscribed
Priced in USD, settled in Algerian Dinars at checkout. Confirmed inscriptions are permanent.
No comments yet. Be the first!