No description https://arka.setka.dev
  • TypeScript 83.8%
  • CSS 15.6%
  • JavaScript 0.6%
Find a file
arka-ui 7347e4e2bf
chore: licence v2.1 — add the non-commercial condition
Reuse stays wide open; making money from it does not.

Restructures the licence around two named conditions instead of one, so
neither can be missed: Section 4 is attribution, Section 5 is
non-commercial. Everything after shifts down a number and all
cross-references were re-checked against the new headings.

Commercial Use is defined rather than left to instinct (§1): selling or
charging for access, shipping it inside a paid product, using it in a
client engagement, carrying ads or affiliate links, or using it to market
a business. Explicitly not commercial: private and personal use, study
and teaching, and a personal portfolio or CV site that sells nothing and
carries no advertising — a job-seeker's own page stays inside the grant.
Genuinely unclear cases resolve as commercial, and Section 13 says to ask.

§5.2 closes the obvious routes around it — a fork, a rewrite in another
framework, a contractor, a subsidiary, or an unpaid sample that leads to
paid work. §5.3 covers a use that starts personal and later turns
commercial. §6.2 now bars repackaging as a template whether or not money
changes hands, since a free giveaway hollows this out just as well.

Commercial terms still exist. They are just not this file.
2026-08-04 15:18:36 +02:00
public/fonts feat!: rebuild the portfolio around Setka and the colors.css palette 2026-08-04 13:54:56 +02:00
src chore!: move off GitHub to git.setka.dev, rewrite the licence 2026-08-04 15:14:21 +02:00
.gitignore feat!: rebuild the portfolio around Setka and the colors.css palette 2026-08-04 13:54:56 +02:00
colors.md refactor(nav): replace the index rail with a slim masthead 2026-08-04 14:56:35 +02:00
eslint.config.mjs Initial commit from Create Next App 2025-11-29 15:59:41 +01:00
LICENSE chore: licence v2.1 — add the non-commercial condition 2026-08-04 15:18:36 +02:00
next.config.ts feat!: rebuild the portfolio around Setka and the colors.css palette 2026-08-04 13:54:56 +02:00
package-lock.json feat!: rebuild the portfolio around Setka and the colors.css palette 2026-08-04 13:54:56 +02:00
package.json feat!: rebuild the portfolio around Setka and the colors.css palette 2026-08-04 13:54:56 +02:00
postcss.config.mjs Initial commit from Create Next App 2025-11-29 15:59:41 +01:00
README.md chore: licence v2.1 — add the non-commercial condition 2026-08-04 15:18:36 +02:00
tsconfig.json Initial commit from Create Next App 2025-11-29 15:59:41 +01:00


Arka

Backend developer. Founder of Setka.


A single-page portfolio, printed like a dossier: ink covers, paper body, one violet, and nothing that phones home.


Setka Contact


Next.js React TypeScript Tailwind CSS Licence


Static export · 5 runtime dependencies · zero third-party requests · zero cookies




What this is

The personal site of Arka — a backend developer from Cambrai, France, and the founder of Setka, a studio that designs, builds and hosts websites where security and privacy are the product rather than a line item.

All of my work runs through Setka. The site says so plainly, in six numbered sections, and then gets out of the way.

"I build what has to hold."


The sections

§ Section What lives there
01 Opening Ink cover plate. Name, role, and the one-sentence version of everything below.
02 Setka What the studio is, what it does, and the three clauses of the pledge it never negotiates.
03 About The route from HTML in 2023 to backend work in 2026, plus how I actually work.
04 Work A dated ledger of what I've built — opened by one entry that stays under seal.
05 Craft Thirteen tools in three columns, one line each on why it earned a place.
06 Contact One address. No form — forms need storage, and storage fills up with other people's data.

Design

The whole page is driven by one token file: src/app/colors.css, documented in colors.md. One brand hue — violet #9D4EDD — against a violet-tinted neutral scale.

  • Paper (#FBFAFC) is the body of the document.
  • Ink (#16131F) is reserved for the opening, the sealed entry, the 404 and the colophon.
  • Every band runs full width, edge to edge. Nothing is laid permanently over an ink section, so no element ever has to guess what colour the surface behind it is.
  • The .ink class re-points the palette to its dark-surface values, so every utility keeps working inside a dark band without a single conditional in the markup.
  • Type is Monocraft throughout, with Green Energy kept for exactly one word.
  • Contrast is audited: body text 10.5:1, muted 4.7:1, and violet only used small where it is --violet-700.

Engineering

The site is a static export. It ships HTML, CSS, and a small amount of JS for three client components — the masthead, the scroll hairline, and the reveal-on-scroll wrapper.

Framework    →  Next.js 16 (App Router, output: "export")
Language     →  TypeScript 5 (strict)
Styling      →  Tailwind CSS 4, tokens from colors.css
Motion       →  IntersectionObserver + CSS keyframes
Deps         →  clsx · tailwind-merge · next · react · react-dom

What it deliberately does not have:

  • No analytics, no telemetry beacon, no third-party scripts
  • No cookies and no local storage
  • No runtime API calls — nothing is fetched from a forge, a chat platform, or anywhere else
  • No animation library, no command-palette library, no icon package
  • No contact form, and therefore no form storage

Every one of those was in the previous version of this site. Removing them made the page faster and made it consistent with what Setka sells.


Project structure

src/
├── app/
│   ├── colors.css        # the palette — single source of truth
│   ├── globals.css       # tokens → Tailwind theme, plus the editorial utilities
│   ├── layout.tsx        # fonts, metadata, JSON-LD, page shell
│   ├── page.tsx          # section composition
│   └── not-found.tsx     # ink 404
├── components/
│   ├── layout/           # Nav (masthead + mobile bar), Footer
│   ├── sections/         # Hero · Setka · About · Work · Craft · Contact
│   └── ui/               # Reveal, ScrollProgress, SetkaMark
├── hooks/
│   └── useSectionSpy.ts  # active section via IntersectionObserver
└── lib/
    ├── sections.ts       # canonical § numbering
    └── utils.ts          # cn()

Running it

Requirements: Node.js ≥ 20, npm.

git clone https://git.setka.dev/arka/arka-portfolio.git
cd arka-portfolio
npm install

npm run dev      # → http://localhost:3000
npm run build    # → static export into ./out
npm run lint     # → ESLint

There are no environment variables. There is nothing to configure. ./out is a folder of files — serve it from anywhere that can serve files.


Deployment

Hosted by Setka, on Setka infrastructure, like everything else I build.

The repo carries no CI pipeline and no platform-specific configuration on purpose: npm run build produces ./out, and the hosting side owns what happens to it from there.


Licence

The Arka Portfolio Licence v2.1 — see LICENSE. Not open source. Owned, and lent on terms.

You may read it, learn from it, and build your own work on top of it — including using it wholesale as your base. Two conditions.

1 · Credit me. Anything you publish based on this must carry a visible credit, reachable in one step from the home page:

Based on the portfolio of Arka
© 2024–2026 Arka — https://git.setka.dev/arka

Real and rendered — not an HTML comment, not display: none. Keep the LICENSE file and the copyright notices intact.

2 · Don't make money from it. No selling it, no client work, no ads, no using it to sell something else. A personal portfolio or CV site that sells nothing is fine; a business site, an agency deliverable or a paid template is not.

Also replace the personal content — my name, biography, contact details, and everything belonging to Setka are outside the licence. Private use carries no obligation at all.

Want it commercially? Ask. That licence exists, it just isn't this one: contact@setka.dev.



Work with me → contact@setka.dev

Every engagement runs through Setka. There is no second door.


© 2026 Arka · Sealed by default