this repo has no description

ogre: rename appview/ogcard to ogre

And move it out of appview.

Signed-off-by: Anirudh Oppiliappan <anirudh@tangled.org>

anirudh.fi 5e4014d0 a15e0f65

verified
+50 -38
+3 -3
appview/config/config.go
··· 139 139 UpdateInterval time.Duration `env:"UPDATE_INTERVAL, default=1h"` 140 140 } 141 141 142 - type OgcardConfig struct { 143 - Host string `env:"HOST, default=https://og.tangled.org"` 142 + type OgreConfig struct { 143 + Host string `env:"HOST, default=https://ogre.tangled.network"` 144 144 } 145 145 146 146 func (cfg RedisConfig) ToURL() string { ··· 175 175 Bluesky BlueskyConfig `env:",prefix=TANGLED_BLUESKY_"` 176 176 Sites SitesConfig `env:",prefix=TANGLED_SITES_"` 177 177 KnotMirror KnotMirrorConfig `env:",prefix=TANGLED_KNOTMIRROR_"` 178 - Ogcard OgcardConfig `env:",prefix=TANGLED_OGCARD_"` 178 + Ogre OgreConfig `env:",prefix=TANGLED_OGRE_"` 179 179 } 180 180 181 181 func LoadConfig(ctx context.Context) (*Config, error) {
+3 -3
appview/issues/issues.go
··· 23 23 "tangled.org/core/appview/models" 24 24 "tangled.org/core/appview/notify" 25 25 "tangled.org/core/appview/oauth" 26 - "tangled.org/core/appview/ogcard" 26 + "tangled.org/core/ogre" 27 27 "tangled.org/core/appview/pages" 28 28 "tangled.org/core/appview/pages/repoinfo" 29 29 "tangled.org/core/appview/pagination" ··· 49 49 logger *slog.Logger 50 50 validator *validator.Validator 51 51 indexer *issues_indexer.Indexer 52 - ogcardClient *ogcard.Client 52 + ogreClient *ogre.Client 53 53 } 54 54 55 55 func New( ··· 79 79 logger: logger, 80 80 validator: validator, 81 81 indexer: indexer, 82 - ogcardClient: ogcard.NewClient(config.Ogcard.Host), 82 + ogreClient: ogre.NewClient(config.Ogre.Host), 83 83 } 84 84 } 85 85
+4 -4
appview/issues/opengraph.go
··· 7 7 "time" 8 8 9 9 "tangled.org/core/appview/models" 10 - "tangled.org/core/appview/ogcard" 10 + "tangled.org/core/ogre" 11 11 ) 12 12 13 13 func (rp *Issues) IssueOpenGraphSummary(w http.ResponseWriter, r *http.Request) { ··· 49 49 50 50 commentCount := len(issue.Comments) 51 51 52 - payload := ogcard.IssueCardPayload{ 52 + payload := ogre.IssueCardPayload{ 53 53 Type: "issue", 54 54 RepoName: f.Name, 55 55 OwnerHandle: ownerHandle, ··· 57 57 Title: issue.Title, 58 58 IssueNumber: issue.IssueId, 59 59 Status: status, 60 - Labels: []ogcard.LabelData{}, 60 + Labels: []ogre.LabelData{}, 61 61 CommentCount: commentCount, 62 62 ReactionCount: 0, 63 63 CreatedAt: issue.Created.Format(time.RFC3339), 64 64 } 65 65 66 - imageBytes, err := rp.ogcardClient.RenderIssueCard(r.Context(), payload) 66 + imageBytes, err := rp.ogreClient.RenderIssueCard(r.Context(), payload) 67 67 if err != nil { 68 68 log.Println("failed to render issue card", err) 69 69 http.Error(w, "failed to render issue card", http.StatusInternalServerError)
appview/ogcard/.gitignore ogre/.gitignore
+4 -4
appview/ogcard/bun.lock ogre/bun.lock
··· 3 3 "configVersion": 1, 4 4 "workspaces": { 5 5 "": { 6 - "name": "@tangled/ogcard-worker", 6 + "name": "@tangled/ogre-worker", 7 7 "dependencies": { 8 8 "@fontsource/inter": "^5.2.8", 9 9 "@resvg/resvg-wasm": "^2.6.2", 10 - "@tangled/ogcard-runtime": "*", 10 + "@tangled/ogre-runtime": "*", 11 11 "lucide-static": "^0.577.0", 12 12 "preact": "^10.29.0", 13 13 "satori": "0.25.0", ··· 24 24 }, 25 25 }, 26 26 "packages/runtime": { 27 - "name": "@tangled/ogcard-runtime", 27 + "name": "@tangled/ogre-runtime", 28 28 "version": "1.0.0", 29 29 }, 30 30 }, ··· 267 267 268 268 "@speed-highlight/core": ["@speed-highlight/core@1.2.15", "", {}, "sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw=="], 269 269 270 - "@tangled/ogcard-runtime": ["@tangled/ogcard-runtime@workspace:packages/runtime"], 270 + "@tangled/ogre-runtime": ["@tangled/ogre-runtime@workspace:packages/runtime"], 271 271 272 272 "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], 273 273
+1 -1
appview/ogcard/client.go ogre/client.go
··· 1 - package ogcard 1 + package ogre 2 2 3 3 import ( 4 4 "bytes"
appview/ogcard/knip.json ogre/knip.json
+2 -2
appview/ogcard/package.json ogre/package.json
··· 1 1 { 2 - "name": "@tangled/ogcard-worker", 2 + "name": "@tangled/ogre-worker", 3 3 "version": "1.0.0", 4 4 "private": true, 5 5 "type": "module", ··· 16 16 "dependencies": { 17 17 "@fontsource/inter": "^5.2.8", 18 18 "@resvg/resvg-wasm": "^2.6.2", 19 - "@tangled/ogcard-runtime": "*", 19 + "@tangled/ogre-runtime": "*", 20 20 "lucide-static": "^0.577.0", 21 21 "preact": "^10.29.0", 22 22 "satori": "0.25.0",
appview/ogcard/packages/runtime/index.ts ogre/packages/runtime/index.ts
+1 -1
appview/ogcard/packages/runtime/package.json ogre/packages/runtime/package.json
··· 1 1 { 2 - "name": "@tangled/ogcard-runtime", 2 + "name": "@tangled/ogre-runtime", 3 3 "version": "1.0.0", 4 4 "private": true, 5 5 "type": "module",
appview/ogcard/packages/runtime/types.ts ogre/packages/runtime/types.ts
appview/ogcard/packages/runtime/workerd.ts ogre/packages/runtime/workerd.ts
appview/ogcard/src/__tests__/assets/avatar.jpg ogre/src/__tests__/assets/avatar.jpg
appview/ogcard/src/__tests__/fixtures.ts ogre/src/__tests__/fixtures.ts
appview/ogcard/src/__tests__/render.test.ts ogre/src/__tests__/render.test.ts
appview/ogcard/src/components/cards/issue.tsx ogre/src/components/cards/issue.tsx
appview/ogcard/src/components/cards/pull-request.tsx ogre/src/components/cards/pull-request.tsx
+10 -1
appview/ogcard/src/components/cards/repository.tsx ogre/src/components/cards/repository.tsx
··· 7 7 import { TYPOGRAPHY } from "../shared/constants"; 8 8 import type { RepositoryCardData } from "../../validation"; 9 9 10 + function repoNameFontSize(name: string): number { 11 + // Available width ~1000px (1104px card content minus language circles area). 12 + // Inter 600 average char width is ~0.58× the font size. 13 + const maxSize = TYPOGRAPHY.repoName.fontSize; 14 + const fitted = Math.floor(1000 / (name.length * 0.58)); 15 + return Math.min(maxSize, Math.max(fitted, 48)); 16 + } 17 + 10 18 export function RepositoryCard(data: RepositoryCardData) { 19 + const fontSize = repoNameFontSize(data.repoName); 11 20 return ( 12 21 <Card> 13 22 <LanguageCircles languages={data.languages} /> 14 23 15 24 <Col style={{ gap: 64 }}> 16 25 <Col style={{ gap: 24 }}> 17 - <span style={{ ...TYPOGRAPHY.repoName, color: "#000000" }}> 26 + <span style={{ ...TYPOGRAPHY.repoName, fontSize, color: "#000000" }}> 18 27 {data.repoName} 19 28 </span> 20 29
appview/ogcard/src/components/shared/avatar.tsx ogre/src/components/shared/avatar.tsx
appview/ogcard/src/components/shared/card-header.tsx ogre/src/components/shared/card-header.tsx
appview/ogcard/src/components/shared/constants.ts ogre/src/components/shared/constants.ts
appview/ogcard/src/components/shared/footer-stats.tsx ogre/src/components/shared/footer-stats.tsx
appview/ogcard/src/components/shared/label-pill.tsx ogre/src/components/shared/label-pill.tsx
appview/ogcard/src/components/shared/language-circles.tsx ogre/src/components/shared/language-circles.tsx
appview/ogcard/src/components/shared/layout.tsx ogre/src/components/shared/layout.tsx
appview/ogcard/src/components/shared/logo.tsx ogre/src/components/shared/logo.tsx
appview/ogcard/src/components/shared/metrics.tsx ogre/src/components/shared/metrics.tsx
appview/ogcard/src/components/shared/stat-item.tsx ogre/src/components/shared/stat-item.tsx
appview/ogcard/src/components/shared/status-badge.tsx ogre/src/components/shared/status-badge.tsx
appview/ogcard/src/icons/lucide.tsx ogre/src/icons/lucide.tsx
appview/ogcard/src/index.tsx ogre/src/index.tsx
+2 -2
appview/ogcard/src/lib/render.ts ogre/src/lib/render.ts
··· 1 1 import type { VNode } from "preact"; 2 - import { initSatori, initResvg, loadFonts } from "@tangled/ogcard-runtime"; 3 - import type { ResvgClass } from "@tangled/ogcard-runtime/types"; 2 + import { initSatori, initResvg, loadFonts } from "@tangled/ogre-runtime"; 3 + import type { ResvgClass } from "@tangled/ogre-runtime/types"; 4 4 5 5 let satoriFn: typeof import("satori").default | null = null; 6 6 let Resvg: ResvgClass | null = null;
appview/ogcard/src/types.d.ts ogre/src/types.d.ts
appview/ogcard/src/validation.ts ogre/src/validation.ts
appview/ogcard/tsconfig.json ogre/tsconfig.json
+3 -3
appview/ogcard/wrangler.jsonc ogre/wrangler.jsonc
··· 1 1 { 2 2 "$schema": "node_modules/wrangler/config-schema.json", 3 - "name": "tangled-ogcard-worker", 3 + "name": "ogre", 4 4 "main": "src/index.tsx", 5 5 "compatibility_date": "2026-03-07", 6 6 "observability": { ··· 8 8 }, 9 9 "routes": [ 10 10 { 11 - "pattern": "og.tangled.org/*", 12 - "zone_name": "tangled.org", 11 + "pattern": "ogre.tangled.network", 12 + "custom_domain": true, 13 13 }, 14 14 ], 15 15 "vars": {
+3 -3
appview/pulls/opengraph.go
··· 7 7 "time" 8 8 9 9 "tangled.org/core/appview/models" 10 - "tangled.org/core/appview/ogcard" 10 + "tangled.org/core/ogre" 11 11 "tangled.org/core/patchutil" 12 12 ) 13 13 ··· 71 71 rounds = 1 72 72 } 73 73 74 - payload := ogcard.PullRequestCardPayload{ 74 + payload := ogre.PullRequestCardPayload{ 75 75 Type: "pullRequest", 76 76 RepoName: f.Name, 77 77 OwnerHandle: ownerHandle, ··· 88 88 CreatedAt: pull.Created.Format(time.RFC3339), 89 89 } 90 90 91 - imageBytes, err := s.ogcardClient.RenderPullRequestCard(r.Context(), payload) 91 + imageBytes, err := s.ogreClient.RenderPullRequestCard(r.Context(), payload) 92 92 if err != nil { 93 93 log.Println("failed to render pull request card", err) 94 94 http.Error(w, "failed to render pull request card", http.StatusInternalServerError)
+3 -3
appview/pulls/pulls.go
··· 26 26 "tangled.org/core/appview/models" 27 27 "tangled.org/core/appview/notify" 28 28 "tangled.org/core/appview/oauth" 29 - "tangled.org/core/appview/ogcard" 29 + "tangled.org/core/ogre" 30 30 "tangled.org/core/appview/pages" 31 31 "tangled.org/core/appview/pages/markup" 32 32 "tangled.org/core/appview/pages/repoinfo" ··· 66 66 logger *slog.Logger 67 67 validator *validator.Validator 68 68 indexer *pulls_indexer.Indexer 69 - ogcardClient *ogcard.Client 69 + ogreClient *ogre.Client 70 70 } 71 71 72 72 func New( ··· 96 96 logger: logger, 97 97 validator: validator, 98 98 indexer: indexer, 99 - ogcardClient: ogcard.NewClient(config.Ogcard.Host), 99 + ogreClient: ogre.NewClient(config.Ogre.Host), 100 100 } 101 101 } 102 102
+5 -5
appview/repo/opengraph.go
··· 9 9 10 10 "github.com/go-enry/go-enry/v2" 11 11 "tangled.org/core/appview/db" 12 - "tangled.org/core/appview/ogcard" 12 + "tangled.org/core/ogre" 13 13 "tangled.org/core/orm" 14 14 "tangled.org/core/types" 15 15 ) ··· 69 69 }) 70 70 } 71 71 72 - var ogLanguages []ogcard.LanguageData 72 + var ogLanguages []ogre.LanguageData 73 73 for _, lang := range languageStats { 74 74 if len(ogLanguages) >= 5 { 75 75 break 76 76 } 77 - ogLanguages = append(ogLanguages, ogcard.LanguageData{ 77 + ogLanguages = append(ogLanguages, ogre.LanguageData{ 78 78 Color: lang.Color, 79 79 Percentage: lang.Percentage, 80 80 }) 81 81 } 82 82 83 - payload := ogcard.RepositoryCardPayload{ 83 + payload := ogre.RepositoryCardPayload{ 84 84 Type: "repository", 85 85 RepoName: f.Name, 86 86 OwnerHandle: ownerHandle, ··· 92 92 Languages: ogLanguages, 93 93 } 94 94 95 - imageBytes, err := rp.ogcardClient.RenderRepositoryCard(r.Context(), payload) 95 + imageBytes, err := rp.ogreClient.RenderRepositoryCard(r.Context(), payload) 96 96 if err != nil { 97 97 log.Println("failed to render repository card", err) 98 98 http.Error(w, "failed to render repository card", http.StatusInternalServerError)
+3 -3
appview/repo/repo.go
··· 20 20 "tangled.org/core/appview/models" 21 21 "tangled.org/core/appview/notify" 22 22 "tangled.org/core/appview/oauth" 23 - "tangled.org/core/appview/ogcard" 23 + "tangled.org/core/ogre" 24 24 "tangled.org/core/appview/pages" 25 25 "tangled.org/core/appview/reporesolver" 26 26 "tangled.org/core/appview/validator" ··· 54 54 serviceAuth *serviceauth.ServiceAuth 55 55 validator *validator.Validator 56 56 cfClient *cloudflare.Client 57 - ogcardClient *ogcard.Client 57 + ogreClient *ogre.Client 58 58 } 59 59 60 60 func New( ··· 84 84 logger: logger, 85 85 validator: validator, 86 86 cfClient: cfClient, 87 - ogcardClient: ogcard.NewClient(config.Ogcard.Host), 87 + ogreClient: ogre.NewClient(config.Ogre.Host), 88 88 } 89 89 } 90 90
+3
ogre/readme.md
··· 1 + # ogre: open graph rendering engine 2 + 3 + 👹
pr.png

This is a binary file and will not be displayed.