8 Commits
Author SHA1 Message Date
zeekay c5f67c06f5 Grant the CI reusable its ID token 2026-10-17 04:18:16 -07:00
zeekayandHanzo Dev 9c7bdaebf0 social.hanzo.ai publishes as a site
The social Deployment is a SPA server over this repo's dist and nothing else:
no SPA_* config, no API of its own (that is api.hanzo.ai). So the export is
published to the Sites plane as `social`, s3://hanzo-sites/hanzo/social, for the
edge to serve with no pod. The build gate already produces dist in the same
job, so the lane names no build of its own.

Checked in headless Chromium: the export on social.hanzo.ai renders what the pod
renders.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-19 10:25:07 -07:00
zeekayandHanzo Dev 9ee5c31d90 Call the plane by its nouns
The catalog is /v1/provider and this org's connections are /v1/connection,
so the two reads here name what they fetch rather than the package that
used to serve them.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-15 11:56:38 -07:00
zeekayandHanzo Dev 91f65e24da social 0.1.3
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-15 11:29:40 -07:00
zeekayandHanzo Dev 9048e06a8a Deleting a post or an account no longer reports a failure
Both deletes answer 204 with no body, and reading that as JSON threw
"Unexpected end of JSON input" after the delete had already happened, so the
screen said it failed. They read the response without parsing it; a refusal
still throws.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-15 11:29:40 -07:00
zeekayandHanzo Dev 9b47e2df4b Social builds and publishes on push
The repository had its hanzo.yml and Dockerfile but no workflow to read them,
so nothing ever built it. The caller is the same one hanzoai/build uses. The
image now builds for both architectures, since the spa base it serves from is
published for both and the cluster runs one node of each.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-15 11:06:21 -07:00
zeekayandHanzo Dev 07488b43af A day's posts read from the left edge
A gui button centres its children, so each chip in the calendar's day column
sat in the middle of a track it did not fill. The chip takes the column's
width and its text reads from the left, which is where a list is read from.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-15 07:40:42 -07:00
zeekayandHanzo Dev 50aa91efd4 Hanzo Social — publish to every account an org owns
A social publishing surface on @hanzo/gui + @hanzo/ui, written against the
platform's own /v1/social and /v1/integration. Six screens: the org roll-up,
a composer, the posts in every state, a month calendar, the networks with
their consent and their handles, and the delivery record.

Two facts shape it. A post carries one channel, so the composer stores one
post per network — which is also what makes writing separately for a single
network free, since it is a different content on that row. Media is a list of
addresses, so a video is ordinary content rather than a second kind of post,
and each network's own rules are checked before the post is stored rather
than discovered at a publish hours later.

State is drawn in luminance on a palette with no hues, and the inversion is
spent once per screen on the thing a person has to act on. Refusals are the
platform's own sentence, read off the RFC 7807 detail the SDK's extractor
drops — a 503 that names the missing credentials is the whole of what anyone
can act on.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-15 06:40:41 -07:00