# A private site that says no by default.

> A private, gated website. Members’ pages are sealed out of the public build, and an edge function verifies a signed session before serving them.

Page: https://adjltechnology.com/work/private-site/
Updated: 2026-11-12

Case study · Private site

Most of ADJL Capital’s site is for its investors. The build seals members’ pages out of the public output. An edge function checks for a signed session before it serves any of them, and when it can’t tell, it refuses. Serverless functions handle property lookups, market data and scheduled email briefs.

[Talk to Daniel](https://adjltechnology.com/work/private-site/#contact)

- **Locks:** Sealed at build, checked at the edge
- **Default:** Refuse when unsure
- **Functions:** Property lookup, market data, scheduled briefs
- **Shown here:** The design only. No keys, paths or rules

People read the top layer, crawlers follow the middle one and machines parse the bottom one.

Build and edge

## Two locks, one rule.

The first lock runs at build time. Members’ pages never reach the public files at all. The second runs at the edge on every request, before any cache. It checks a signed session and serves the page only when the check passes.

1. Members’ pages are sealed out of the public build, so they never reach the public files.
2. Every request for one meets an edge function first, before any cache.
3. A request with a valid signed session gets the page.
4. Anything the function can’t verify gets an error, and nothing is served.
5. If the lock were ever missing from a deploy, the members’ pages wouldn’t exist in it.

Failure mode

## When unsure, refuse.

If the edge function can’t decide, it serves an error and not the page. If the lock were ever missing from a deploy, the members’ pages wouldn’t exist in it. That trade is deliberate. A confusing error now and then is cheap next to a members’ page served to a stranger.

Serverless functions

## Functions behind the pages.

### Property lookup

Takes a pasted listing URL and returns what’s known about the address, with each figure labeled by its source. It checks access and rate limits before it spends anything.

### Market data

Quotes, filings and news, fetched with server-side keys the browser never sees.

### Scheduled briefs

Email briefs that run on a schedule and go only to people who asked for them, with a working unsubscribe.

Withheld from this page

Not shown

## Left out on purpose.

This page describes the design and leaves out the paths, the token format, the rules and the keys. Those stay private for the same reason the members’ pages do.

Built under

- [Websites & Apps](https://adjltechnology.com/services/software/)

Next

- [How this site is built](https://adjltechnology.com/work/this-site/)

Start here

## Tell us what’s slow, or what can’t be found.

One paragraph is plenty. Tell us what you want built, the step that costs the most, or the page that should rank and doesn’t. If you know why the obvious fix hasn’t worked, say that too.

[Start a project](https://adjltechnology.com/start/)

[daniel@adjlcapital.com](mailto:daniel@adjlcapital.com)

[Email Daniel](mailto:daniel@adjlcapital.com)

Daniel reads and answers these himself, usually within a day or two. No sequence, no drip, and nothing sold to anyone.

[ADJL Technology](https://adjltechnology.com/)

Today’s investment, tomorrow’s legacy.

ADJL Technology builds AI systems, websites and apps, and the technical SEO that gets them found. Founded and led by Daniel Laskowski.

[daniel@adjlcapital.com](mailto:daniel@adjlcapital.com)

Built 2026-11-12 from commit 6afca01. No cookies, no trackers, no third-party scripts.

ADJL Technology. Nothing on this site is an offer to sell or a solicitation of any security, and nothing here is investment advice. Descriptions of internal systems are general by design and omit parameters and thresholds.
