← All work
Ethereal Solace HEXA Design + Full-Stack Build 2026

Ethereal Solace HEXA

Fourth site on the same setup, and the first one nobody was paying for.

Role
Designer, Full-Stack Developer
Year
2026
etherealsolacehexa.com
Live
Fourth build, first with no client

The clan was doing fine on a Facebook page and a group chat, so I built the site anyway.

Problem
Nothing was broken, so there was no brief to write and nobody asking for a website.
Built
A live clan site with a roster, a match center, tournaments with brackets, a journal, and a private admin, built solo on the same Cloudflare setup as three client sites.
Result
Designed and built from April 2026, live at etherealsolacehexa.com since July, and still getting adjusted. The editing rules I worked out here went back into the paid builds.

Ethereal Solace HEXA is a Philippine Call of Duty Mobile clan with 176 members on the roster. I co-run it and I play in it, so on this one I was the client, the user, and the developer, and that was the whole client relationship.

This is the finding solutions to a problem that doesn't exist type of trap, and I knew that going in. I find this kind of build fun, so I made it anyway. What I wanted was a roster that stays put, a match record that survives the scroll, and a bracket I could point people at without linking out to a platform that might delete it.

Why it exists

Three things made this different from the client builds.

01

Nobody was paying and nobody set a date

Client work arrives with a budget and a launch date, and those two decide the scope before I do. Here I set the scope, so the only person it could run away from was me. What kept it bounded was the same written spec I use on paid builds.

02

I am the user, so the research cost nothing

I play in this clan and help run it, so I already knew what a roster page has to say and what a match record has to keep. On a client build that knowledge takes interviews. The risk flips, though, since being the user makes it easy to stop questioning my own habits.

03

Rules from the paid work carried straight over

Never invent a player, a match, a date, or a result. IGN is the only public identity, and no ages, schools, or locations go on the site anywhere. I wrote both rules down before building anything, and they matter here because a clan roster skews young.

  • 176 Clan members on the private roster
  • 4 Public routes people actually came for
  • 375px Width the admin gets edited at
  • 0 Invented players, matches, or results
The research

Four kinds of reference, and each one settled a different question.

Reading started in April alongside the build, not ahead of it. Clan pages, global orgs, Philippine orgs, and bracket platforms each answered something different, and two of them answered by showing what to leave out.

Reference 01

CODM clan pages barely exist as pages

Most clans in this scene live on a Facebook page and a group chat, which is exactly where HEXA started. Beating that takes almost nothing, so the question worth answering was what to build once it was beaten.

Reference 02

Team Liquid and its peers show what a roster page owes a reader

Large org sites answer who plays, for which team, in which game, and what that team has won, in that order. I took the ordering and dropped everything that needs a marketing department behind it, like the sponsor walls and the merch.

Reference 03

Philippine orgs set the register HEXA competes in

Blacklist, Omega, and TNC operate at a scale HEXA does not, and their sites still read as the same country and the same scene. That tier decided the tone, so the copy stays plain and the site never claims a record it has not earned.

Reference 04

Bracket platforms decided how a tournament page behaves

Battlefy, Toornament, and Challonge already settled how a bracket, a group stage, and a battle royale leaderboard read. I rebuilt that behavior on the site itself, since a clan site that links out to a bracket hosted somewhere else loses it the day that link dies.

The build

The build came down to four things.

  1. 01

    Tournaments, brackets, and battle royale scoring

    A stage is a bracket, a group, or a battle royale leaderboard, and every standing derives from recorded results rather than a hand-typed table. Battle royale scoring runs on placement points plus points per kill, and ties break by points, then first places, then kills. Other clans enter as guest teams, so they can be opponents without appearing on the public teams page.

  2. 02

    Per-game results with the scoreboard attached

    A Call of Duty Mobile match is a series, so a result of 3 to 1 hides which modes were played and how each one went. Every game gets its own row with its mode and its map, Hardpoint through Search and Destroy to battle royale, and each row holds fixed screenshot slots. The match page then shows the scoreboard the players actually saw.

  3. 03

    An admin the clan can run from a phone

    Every editor runs one save model, so the screen tells the truth about unsaved work at all times. Photos upload from the record they belong to rather than a separate library trip. Deleting an image is blocked while anything still references it, and removing a member closes their history with a departure date instead of erasing the row.

  4. 04

    Pages that are already readable when they arrive

    Brackets, filters, standings, and match pages all come down finished, so nothing on a public page waits for a script before it can be read. This is a mobile game, so the site gets opened on phones on mobile data more than on anything else, and it behaves the same there as it does on my desktop. The admin is the only part behind a login, and it stays shut when anything about that login goes wrong.

The work

Four public routes and the private side that fills them.

A tournament page holds the bracket, the standings, and the entrant list, and every number on it comes from a result somebody recorded.

Outcome

Live and in use, with nothing worth printing on traffic yet.

The site is live at etherealsolacehexa.com and the clan uses it. There are no traffic figures worth printing, no conversion numbers, and one public team whose competitive record is still short, so this page carries scope and craft rather than results. Daitoku Ramen shipped in the same position, and I would rather say so than invent something.

What the build gave back is easier to check. Nobody was waiting on me, so I could redo the editing rules until they were right, and they came out as two documents, one on how an admin should behave and one on how article sections should work. Both are in use on the paid builds now.

  • Live In production at etherealsolacehexa.com
  • 4th Site built on this same setup
  • 2 Write-ups on how an admin should behave, now used on paid builds
Live problems

What's on the bench right now.

The site is live and the clan keeps playing, so the work never fully closes. Two items are open on the bench and one is solved and written up. Open a card to read where each stands.

Live 01 UI/UX review
Admin, tournament editor

I have not read the tournament editor at the width I edit at

  • Creating a tournament runs as one guided page covering event details, entries, and stages, which is a lot of form on one screen.
  • I have checked it locally and never sat in front of the live one, logged in, at my working width.
Open question

The editor works. Whether it reads well when there are six stages on the page, or whether it needs to break into steps, stays open until I use it for a real tournament.

Live 02 Open
Responsive, public pages

The live site still needs a walk from 375 to 1440

  • Brackets are the widest thing on the site, so they are the most likely to push a phone page sideways.
  • I checked five widths locally and the live check ran at one width only, on a browser that could not resize.

Solved 03 Solved
Admin, results grid

A results grid labelled its fourth column Game 2.5

  • The grid numbered its columns off a running value instead of counting games, so the fourth one read Game 2.5.
  • Somebody entering a result has to trust the column header, since that is the only thing telling them which game they are typing into.

Live 01
Admin, tournament editor

I have not read the tournament editor at the width I edit at

Where this stands

The tournament editor is the densest screen in the admin, since one page carries the event, its entrants, and every stage inside it. Locally it holds, and the live one I have only seen from outside the login gate.

What closes it

Running a real tournament through it and watching where I slow down. If setting up stages means scrolling past the entrant list every time, the page becomes steps rather than one form.

Live 02
Responsive, public pages

The live site still needs a walk from 375 to 1440

Where this stands

Every layout rule got checked locally at 320, 375, 768, 1024, and 1440px before the site went up, and the check on the live site happened at one fixed width. I would rather write that down than claim a pass I did not do.

What closes it

Walking the live site at 375, 768, 900, 1024, and 1440px and confirming nothing pushes the page sideways at any of them, brackets first.

Solved 03
Admin, results grid

A results grid labelled its fourth column Game 2.5

What happened

A Call of Duty Mobile match is a series, so the results grid gives each game its own column. The header numbers came off the wrong value, and the fourth column came out as Game 2.5 instead of Game 4.

Why it mattered more than it looks

The person entering results is usually doing it right after playing, on a phone, from screenshots. A header that reads Game 2.5 either stops them cold or gets ignored, and a result typed into the wrong game is the one mistake this whole site exists to prevent.

The fix

The columns now count games, so the fourth one reads Game 4. I caught it on the pass I do after every release, where I read the screens instead of the code.