@wenathlan/cobaia 2.0.166 → 2.0.168

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/.dockerignore +1 -1
  2. package/App.tsx +2 -31
  3. package/Cargo.toml +17 -0
  4. package/Dockerfile +162 -3
  5. package/MANIFEST.in +7 -0
  6. package/biome.jsonc +3 -3
  7. package/build.gradle.kts +1 -1
  8. package/bun.lock +396 -343
  9. package/cobaia.csproj +2 -2
  10. package/cobaia.gemspec +2 -2
  11. package/cobaia.java +1 -1
  12. package/cobaia.rs +8 -0
  13. package/db.ts +12 -17
  14. package/docker-compose.yml +58 -0
  15. package/docker.config +74 -0
  16. package/homebrew.rb +25 -0
  17. package/keywords.txt +1 -0
  18. package/monetization.ts +248 -0
  19. package/nginx.conf +106 -0
  20. package/package.json +74 -76
  21. package/pnpm-workspace.yaml +59 -38
  22. package/pom.xml +2 -2
  23. package/pyproject.toml +23 -0
  24. package/routerbase.ts +1 -0
  25. package/sandboxmodality.ts +26 -40
  26. package/sol/Sol.tsx +1 -1
  27. package/sol/apps/apps.tsx +2 -2
  28. package/sol/blog/blog.tsx +2 -2
  29. package/sol/home/home.tsx +2 -2
  30. package/sol/intro/intro.tsx +1 -1
  31. package/sol/onboarding/onboarding.tsx +1 -1
  32. package/sol/pricing/pricing.tsx +1 -1
  33. package/sol/shell/Shell.tsx +2 -2
  34. package/sol/support/support.tsx +1 -1
  35. package/sol/wingets/IntroFooter.tsx +1 -1
  36. package/sol/wingets/IntroPlans.tsx +1 -1
  37. package/sol/wingets/ShellAdsslot.tsx +1 -1
  38. package/tauri.conf.json +1 -1
  39. package/{tests → test}/adsconfig.test.ts +2 -2
  40. package/{tests → test}/checkoutlinks.test.ts +2 -2
  41. package/{tests → test}/entryflow.test.ts +2 -2
  42. package/{tests → test}/familyurl.test.ts +1 -1
  43. package/{tests → test}/posts.test.ts +2 -2
  44. package/{tests → test}/sandboxmodality.test.ts +1 -1
  45. package/tsconfig.json +1 -0
  46. package/vite.config.ts +14 -0
  47. package/vitest.config.ts +9 -1
  48. package/wingets.ts +21 -0
  49. package/adsconfig.ts +0 -59
  50. package/checkoutlinks.ts +0 -80
  51. package/posts.ts +0 -54
  52. package/roster.ts +0 -29
  53. package/sol/wingets/index.ts +0 -20
package/.dockerignore CHANGED
@@ -38,4 +38,4 @@ staging
38
38
  __pycache__
39
39
  *.pyc
40
40
  *.pyo
41
- tests/tmp
41
+ test/tmp
package/App.tsx CHANGED
@@ -24,45 +24,16 @@ import "@fontsource-variable/inter";
24
24
  import "./sol/sol.css";
25
25
  import { seedLabels } from "./labels";
26
26
 
27
+ import { routerBase } from "./routerbase.ts";
27
28
  // the copy law rides the boot: the seed refreshes the label store rows from
28
29
  // the manifest (the browser cache mirrors the site db rows) before the theme
29
30
  // renders — best effort, the manifest always answers the wingets.
30
31
  if (typeof window !== "undefined") void seedLabels().catch(() => {});
31
32
 
32
- /** the route segments the theme answers to — the mount prefix of a deploy
33
- * unit is whatever precedes the first one of these in the boot path. */
34
- const KNOWN_ROUTES: readonly string[] = [
35
- "/intro",
36
- "/apps",
37
- "/pricing",
38
- "/support",
39
- "/blog",
40
- "/legal",
41
- ];
42
-
43
- function routerBase(): string {
44
- const declaredBase = import.meta.env.BASE_URL;
45
- // the build-time base wins (the pages workflow mounts every app at /<slug>/)
46
- if (declaredBase !== "/" && declaredBase !== "./") return declaredBase.replace(/\/$/, "");
47
- const path = window.location.pathname.replace(/index\.html$/, "");
48
- // a known route at the root means the app is mounted at "/" — no base
49
- if (KNOWN_ROUTES.some((route) => path === route || path.startsWith(`${route}/`))) return "";
50
- // a lone first segment that is no known route is a mount prefix (the
51
- // power clip and the family stage serve this app under its slug)
52
- const segments = path.replace(/^\/+|\/+$/g, "").split("/").filter(Boolean);
53
- if (segments.length === 1) return `/${segments[0]}`;
54
- // otherwise the mount prefix is whatever precedes the first known segment
55
- // (the static hosting case: the deep link still lands on its page)
56
- for (const route of KNOWN_ROUTES) {
57
- const at = path.indexOf(route);
58
- if (at > 0) return path.slice(0, at).replace(/\/$/, "");
59
- }
60
- return "";
61
- }
62
33
 
63
34
  function App() {
64
35
  return (
65
- <WouterRouter base={routerBase()}>
36
+ <WouterRouter base={routerBase("cobaia")}>
66
37
  <Sol />
67
38
  </WouterRouter>
68
39
  );
package/Cargo.toml ADDED
@@ -0,0 +1,17 @@
1
+ # cobaia — the rust version envelope crate of the family (the cargo channel).
2
+ # The crate carries the version constant the metadata lockstep stamps (the
3
+ # cobaia.java precedent: the registry lanes reference it, never compile it
4
+ # locally), the lane builds with `cargo package --no-verify --allow-dirty`
5
+ # and stamps the version before building.
6
+ [package]
7
+ name = "wenathlan-cobaia"
8
+ version = "2.0.167"
9
+ edition = "2021"
10
+ description = "The monetization surface — the plans, the support rails and the honest advertisement slots"
11
+ license = "GPL-3.0-only"
12
+ repository = "https://github.com/wenathlan/devthink"
13
+ authors = ["wenathlan"]
14
+
15
+ [lib]
16
+ name = "cobaia"
17
+ path = "cobaia.rs"
package/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- # cobaia 2.0.166 — THE SITE CONTAINER FILE
1
+ # cobaia 2.0.168 — THE SITE CONTAINER FILE
2
2
  #
3
3
  # The family container doctrine in the sol shape: one versioned static
4
4
  # container per site. The sol theme builds inside the container — stage one
@@ -14,7 +14,7 @@
14
14
  # the nginx base the multi-arch lane carries).
15
15
  FROM --platform=$BUILDPLATFORM node:26-alpine@sha256:40cd011b55415bc894e45b02fdd5a5dfde056921b7d23a64c74f80497af48797 AS solbuild
16
16
 
17
- ARG COBAIA_VERSION=2.0.166
17
+ ARG COBAIA_VERSION=2.0.168
18
18
 
19
19
  # The family context fix (the staged shape the site containers read): the
20
20
  # application rides the context nested under app/ with the sibling sources
@@ -30,11 +30,170 @@ RUN apk add --no-cache python3 make g++ \
30
30
  COPY app/ .
31
31
  # the copy-law vault sibling: the sol sources import the label store through the @wenathlan/vault/labelstore bridge and the vite alias resolves the specifier to ../vault/labelstore.ts, so the sibling sources land at /src/vault where that bridge answers inside the container (the app-only context left the import unloadable and the vite step died on labels.ts).
32
32
  COPY vault/ /src/vault/
33
+ # The devthink sibling of the family law: routerbase.ts re-exports the
34
+ # family routerBase from ../devthink/routerbase.ts, so the devthink
35
+ # sources land at /src/devthink where that re-export answers inside the
36
+ # container (the same sibling-copy law the vault line above carries).
37
+ COPY devthink/ /src/devthink/
33
38
  RUN pnpm build
34
39
 
40
+ # ════════════════════════════════════════════════════════════════════
41
+ # THE OS-DISTRIBUTION CATALOG LANES (the container-lane law, the family
42
+ # half): the thirteen os-distribution seats the saddle osprofiles catalog
43
+ # answers ride the cobaia container the same law the saddle engine answers
44
+ # — every profile with no runnable container base ships as an honest
45
+ # catalog lane, a scratch-based image whose config carries the profile
46
+ # row the saddle catalog renders at build time (the import law: the json
47
+ # the stages COPY renders from saddle/osprofiles.ts, the catalog never
48
+ # duplicates here — cobaia imports the engine catalog the saddle owns).
49
+ # the catalog lanes ride before the runtime stage so the default build keeps answering the runtime target (the family builds never pass --target — the saddle lanes always do, the os seats close the saddle file the same law).
50
+ # ════════════════════════════════════════════════════════════════════
51
+ FROM scratch AS osgrapheneos
52
+ ARG COBAIA_VERSION=2.0.168
53
+ ARG COBAIA_OS_PROFILE="grapheneos"
54
+ ENV COBAIA_OS_PROFILE=grapheneos
55
+ LABEL org.opencontainers.image.title="cobaia (the grapheneos os-distribution catalog lane)" \
56
+ org.opencontainers.image.description="the grapheneos os-distribution seat as a catalog lane of the cobaia container: a privacy and security hardened version of android — no runnable container base exists for an android firmware seat, the lane publishes the profile config the engine reads." \
57
+ org.opencontainers.image.version="${COBAIA_VERSION}" \
58
+ org.opencontainers.image.licenses="GPL-3.0-only" \
59
+ org.opencontainers.image.source="https://github.com/wenathlan/devthink"
60
+ COPY osprofiles/grapheneos.json /cobaia/osprofile.json
61
+
62
+ FROM scratch AS osmaruos
63
+ ARG COBAIA_VERSION=2.0.168
64
+ ARG COBAIA_OS_PROFILE="maruos"
65
+ ENV COBAIA_OS_PROFILE=maruos
66
+ LABEL org.opencontainers.image.title="cobaia (the maruos os-distribution catalog lane)" \
67
+ org.opencontainers.image.description="the maruos os-distribution seat as a catalog lane of the cobaia container: maru os is firmware, not an application: the android firmware seat with the debian desktop — no runnable container base exists for a firmware seat, the lane publishes the profile config the engine reads." \
68
+ org.opencontainers.image.version="${COBAIA_VERSION}" \
69
+ org.opencontainers.image.licenses="GPL-3.0-only" \
70
+ org.opencontainers.image.source="https://github.com/wenathlan/devthink"
71
+ COPY osprofiles/maruos.json /cobaia/osprofile.json
72
+
73
+ FROM scratch AS osv
74
+ ARG COBAIA_VERSION=2.0.168
75
+ ARG COBAIA_OS_PROFILE="v"
76
+ ENV COBAIA_OS_PROFILE=v
77
+ LABEL org.opencontainers.image.title="cobaia (the v os-distribution catalog lane)" \
78
+ org.opencontainers.image.description="the v os-distribution seat as a catalog lane of the cobaia container: the v language platform target (vlang): the language engine seat, never a guest distribution — no runnable container base exists for the languageos seat, the lane publishes the profile config the engine reads." \
79
+ org.opencontainers.image.version="${COBAIA_VERSION}" \
80
+ org.opencontainers.image.licenses="GPL-3.0-only" \
81
+ org.opencontainers.image.source="https://github.com/wenathlan/devthink"
82
+ COPY osprofiles/v.json /cobaia/osprofile.json
83
+
84
+ FROM scratch AS oswindows
85
+ ARG COBAIA_VERSION=2.0.168
86
+ ARG COBAIA_OS_PROFILE="windows"
87
+ ENV COBAIA_OS_PROFILE=windows
88
+ LABEL org.opencontainers.image.title="cobaia (the windows os-distribution catalog lane)" \
89
+ org.opencontainers.image.description="the windows os-distribution seat as a catalog lane of the cobaia container: the windows guest vocabulary the exe seats execute — no runnable container base exists for the windows seat the engine hosts as a guest, the lane publishes the profile config the engine reads." \
90
+ org.opencontainers.image.version="${COBAIA_VERSION}" \
91
+ org.opencontainers.image.licenses="GPL-3.0-only" \
92
+ org.opencontainers.image.source="https://github.com/wenathlan/devthink"
93
+ COPY osprofiles/windows.json /cobaia/osprofile.json
94
+
95
+ FROM scratch AS ospostmarketos
96
+ ARG COBAIA_VERSION=2.0.168
97
+ ARG COBAIA_OS_PROFILE="postmarketos"
98
+ ENV COBAIA_OS_PROFILE=postmarketos
99
+ LABEL org.opencontainers.image.title="cobaia (the postmarketos os-distribution catalog lane)" \
100
+ org.opencontainers.image.description="the postmarketos os-distribution seat as a catalog lane of the cobaia container: the alpine-based mobile distribution — no runnable container base exists for the mobile seat, the lane publishes the profile config the engine reads." \
101
+ org.opencontainers.image.version="${COBAIA_VERSION}" \
102
+ org.opencontainers.image.licenses="GPL-3.0-only" \
103
+ org.opencontainers.image.source="https://github.com/wenathlan/devthink"
104
+ COPY osprofiles/postmarketos.json /cobaia/osprofile.json
105
+
106
+ FROM scratch AS oslineageos
107
+ ARG COBAIA_VERSION=2.0.168
108
+ ARG COBAIA_OS_PROFILE="lineageos"
109
+ ENV COBAIA_OS_PROFILE=lineageos
110
+ LABEL org.opencontainers.image.title="cobaia (the lineageos os-distribution catalog lane)" \
111
+ org.opencontainers.image.description="the lineageos os-distribution seat as a catalog lane of the cobaia container: the android community distribution — no runnable container base exists for the mobile seat, the lane publishes the profile config the engine reads." \
112
+ org.opencontainers.image.version="${COBAIA_VERSION}" \
113
+ org.opencontainers.image.licenses="GPL-3.0-only" \
114
+ org.opencontainers.image.source="https://github.com/wenathlan/devthink"
115
+ COPY osprofiles/lineageos.json /cobaia/osprofile.json
116
+
117
+ FROM scratch AS oscalyxos
118
+ ARG COBAIA_VERSION=2.0.168
119
+ ARG COBAIA_OS_PROFILE="calyxos"
120
+ ENV COBAIA_OS_PROFILE=calyxos
121
+ LABEL org.opencontainers.image.title="cobaia (the calyxos os-distribution catalog lane)" \
122
+ org.opencontainers.image.description="the calyxos os-distribution seat as a catalog lane of the cobaia container: the privacy-focused android distribution, the hardened mobile seat beside grapheneos — no runnable container base exists for the mobile seat, the lane publishes the profile config the engine reads." \
123
+ org.opencontainers.image.version="${COBAIA_VERSION}" \
124
+ org.opencontainers.image.licenses="GPL-3.0-only" \
125
+ org.opencontainers.image.source="https://github.com/wenathlan/devthink"
126
+ COPY osprofiles/calyxos.json /cobaia/osprofile.json
127
+
128
+ FROM scratch AS osarchlinux
129
+ ARG COBAIA_VERSION=2.0.168
130
+ ARG COBAIA_OS_PROFILE="archlinux"
131
+ ENV COBAIA_OS_PROFILE=archlinux
132
+ LABEL org.opencontainers.image.title="cobaia (the archlinux os-distribution catalog lane)" \
133
+ org.opencontainers.image.description="the archlinux os-distribution seat as a catalog lane of the cobaia container: the rolling-release distribution omarchy builds on, the pacman desktop seat — the lane publishes the profile config the engine reads." \
134
+ org.opencontainers.image.version="${COBAIA_VERSION}" \
135
+ org.opencontainers.image.licenses="GPL-3.0-only" \
136
+ org.opencontainers.image.source="https://github.com/wenathlan/devthink"
137
+ COPY osprofiles/archlinux.json /cobaia/osprofile.json
138
+
139
+ FROM scratch AS osalpine
140
+ ARG COBAIA_VERSION=2.0.168
141
+ ARG COBAIA_OS_PROFILE="alpine"
142
+ ENV COBAIA_OS_PROFILE=alpine
143
+ LABEL org.opencontainers.image.title="cobaia (the alpine os-distribution catalog lane)" \
144
+ org.opencontainers.image.description="the alpine os-distribution seat as a catalog lane of the cobaia container: the musl-based lightweight distribution, the small-footprint seat the musl legs answer — the lane publishes the profile config the engine reads." \
145
+ org.opencontainers.image.version="${COBAIA_VERSION}" \
146
+ org.opencontainers.image.licenses="GPL-3.0-only" \
147
+ org.opencontainers.image.source="https://github.com/wenathlan/devthink"
148
+ COPY osprofiles/alpine.json /cobaia/osprofile.json
149
+
150
+ FROM scratch AS osdebian
151
+ ARG COBAIA_VERSION=2.0.168
152
+ ARG COBAIA_OS_PROFILE="debian"
153
+ ENV COBAIA_OS_PROFILE=debian
154
+ LABEL org.opencontainers.image.title="cobaia (the debian os-distribution catalog lane)" \
155
+ org.opencontainers.image.description="the debian os-distribution seat as a catalog lane of the cobaia container: the universal operating system, the apt desktop seat the widest hardware matrix answers — the lane publishes the profile config the engine reads." \
156
+ org.opencontainers.image.version="${COBAIA_VERSION}" \
157
+ org.opencontainers.image.licenses="GPL-3.0-only" \
158
+ org.opencontainers.image.source="https://github.com/wenathlan/devthink"
159
+ COPY osprofiles/debian.json /cobaia/osprofile.json
160
+
161
+ FROM scratch AS osfedora
162
+ ARG COBAIA_VERSION=2.0.168
163
+ ARG COBAIA_OS_PROFILE="fedora"
164
+ ENV COBAIA_OS_PROFILE=fedora
165
+ LABEL org.opencontainers.image.title="cobaia (the fedora os-distribution catalog lane)" \
166
+ org.opencontainers.image.description="the fedora os-distribution seat as a catalog lane of the cobaia container: the red-hat-upstream community distribution, the rpm desktop seat beside the apt rows — the lane publishes the profile config the engine reads." \
167
+ org.opencontainers.image.version="${COBAIA_VERSION}" \
168
+ org.opencontainers.image.licenses="GPL-3.0-only" \
169
+ org.opencontainers.image.source="https://github.com/wenathlan/devthink"
170
+ COPY osprofiles/fedora.json /cobaia/osprofile.json
171
+
172
+ FROM scratch AS osnixos
173
+ ARG COBAIA_VERSION=2.0.168
174
+ ARG COBAIA_OS_PROFILE="nixos"
175
+ ENV COBAIA_OS_PROFILE=nixos
176
+ LABEL org.opencontainers.image.title="cobaia (the nixos os-distribution catalog lane)" \
177
+ org.opencontainers.image.description="the nixos os-distribution seat as a catalog lane of the cobaia container: the declarative distribution the nix package manager builds, the reproducible-system seat — the lane publishes the profile config the engine reads." \
178
+ org.opencontainers.image.version="${COBAIA_VERSION}" \
179
+ org.opencontainers.image.licenses="GPL-3.0-only" \
180
+ org.opencontainers.image.source="https://github.com/wenathlan/devthink"
181
+ COPY osprofiles/nixos.json /cobaia/osprofile.json
182
+
183
+ FROM scratch AS osvoid
184
+ ARG COBAIA_VERSION=2.0.168
185
+ ARG COBAIA_OS_PROFILE="void"
186
+ ENV COBAIA_OS_PROFILE=void
187
+ LABEL org.opencontainers.image.title="cobaia (the void os-distribution catalog lane)" \
188
+ org.opencontainers.image.description="the void os-distribution seat as a catalog lane of the cobaia container: the independent source-rolling distribution, the xbps seat the musl legs answer beside alpine — the lane publishes the profile config the engine reads." \
189
+ org.opencontainers.image.version="${COBAIA_VERSION}" \
190
+ org.opencontainers.image.licenses="GPL-3.0-only" \
191
+ org.opencontainers.image.source="https://github.com/wenathlan/devthink"
192
+ COPY osprofiles/void.json /cobaia/osprofile.json
193
+
35
194
  FROM nginxinc/nginx-unprivileged:1.29-alpine@sha256:0c79d56aee561a1d81c63f00eee5fb5fe29279560cdc55e91425133104c7fbe6
36
195
 
37
- ARG COBAIA_VERSION=2.0.166
196
+ ARG COBAIA_VERSION=2.0.168
38
197
 
39
198
  LABEL org.opencontainers.image.title="cobaia" \
40
199
  org.opencontainers.image.description="cobaia — the monetization surface: the ads, the plans and the conversion, kept apart from the main sites." \
package/MANIFEST.in ADDED
@@ -0,0 +1,7 @@
1
+ # cobaia — the pypi file manifest of the family (the pypi channel).
2
+ # Mirrors the file list the cobaia gemspec declares in spec.files: the
3
+ # readme, the docs set and the tests directory.
4
+ include README.md
5
+ recursive-include docs *
6
+ recursive-include test *
7
+ graft test
package/biome.jsonc CHANGED
@@ -21,8 +21,8 @@
21
21
  "!**/bun.lock",
22
22
  "!**/*.min.js",
23
23
  "!**/docs",
24
- "!**/tests/tmp",
25
- "!**/tests/code",
24
+ "!**/test/tmp",
25
+ "!**/test/code",
26
26
  "!**/sol/dist",
27
27
  "!**/sol/.vite",
28
28
  "!**/sol/node_modules",
@@ -113,7 +113,7 @@
113
113
  }
114
114
  },
115
115
  {
116
- "includes": ["tests/workflowcheck.ts", "tests/publishlanes.test.ts"],
116
+ "includes": ["test/workflowcheck.ts", "test/publishlanes.test.ts"],
117
117
  "linter": {
118
118
  "rules": {
119
119
  "suspicious": {
package/build.gradle.kts CHANGED
@@ -26,7 +26,7 @@ tasks.jar {
26
26
  from(layout.projectDirectory) {
27
27
  include("README.md")
28
28
  include("docs/**")
29
- include("tests/**")
29
+ include("test/**")
30
30
  }
31
31
  }
32
32