-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlibcard.config.yaml
More file actions
241 lines (230 loc) · 10.6 KB
/
Copy pathlibcard.config.yaml
File metadata and controls
241 lines (230 loc) · 10.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
# yaml-language-server: $schema=./libcard.schema.json
#
# ┌─────────────────────────────────────────────────────────────────────┐
# │ This is the ONLY file you need to edit to make LibCard your own. │
# │ Change the values below, commit, and push — GitHub Pages rebuilds. │
# │ The `$schema` line above gives you autocomplete + validation in │
# │ editors like VS Code (and tells AI agents exactly what's allowed). │
# │ To pull in new themes/features later: `pnpm run update` — it leaves │
# │ this file untouched. Full guide: docs/UPGRADING.md │
# └─────────────────────────────────────────────────────────────────────┘
# --- Who you are (the card header) ---
profile:
name: Christopher Smothers
tagline: Building xNet — a local-first platform for apps that work offline, sync peer-to-peer, and keep your data under your control
avatar: /avatar.jpg # a file in /public, or a full https:// URL
location: San Francisco, CA
# --- Contact details ---
# These power the "Save contact" button (a downloadable vCard) and the QR
# business card. Every field is optional — include only what you want to share.
contact:
email: chris.smothers@gmail.com
phone: "" # e.g. "+1-555-123-4567"
organization: xNet
title: Maintainer
website: https://xnet.fyi
# --- Social icon row (icon-only, shown above the links) ---
socials:
- platform: github
url: https://github.com/crs48
- platform: linkedin
url: https://www.linkedin.com/in/chrissmothers/
- platform: x
url: https://x.com/becomingbabyman
- platform: bluesky
url: https://bsky.app/profile/crs22.bsky.social
- platform: youtube
url: https://www.youtube.com/channel/UC3MAaU1oKalapO7rjZps7hQ
- platform: instagram
url: https://www.instagram.com/becomingbabyman/
- platform: telegram
url: https://t.me/becomingbabyman
# --- Your links (the buttons) ---
# My pinned GitHub repos, in pinned order.
links:
- label: Nervous System Healing (resources)
url: https://crs48.github.io/nervous-system-healing
icon: heart
- label: xNet
url: https://github.com/crs48/xNet
icon: github
star: true # add a "★ Star" sub-button that opens the repo
stars: build # bake the star count in at build time (zero runtime JS)
- label: xnet.fyi
url: https://xnet.fyi/
icon: globe
- label: xnet.fyi/blog/a-great-pirate-age
url: https://xnet.fyi/blog/a-great-pirate-age/
icon: globe
- label: xnet.fyi/blog/timeout
url: https://xnet.fyi/blog/timeout/
icon: heart
- label: LIBCard
url: https://github.com/crs48/LIBCard
icon: github
star: true # add a "★ Star" sub-button that opens the repo
stars: build # bake the star count in at build time (zero runtime JS)
- label: My personal site
url: https://crs48.github.io/LIBCard
icon: globe
- label: murmuration
url: https://github.com/crs48/murmuration
icon: github
star: true # add a "★ Star" sub-button that opens the repo
stars: build # bake the star count in at build time (zero runtime JS)
- label: flocking simulation
url: https://crs48.github.io/murmuration
icon: globe
- label: warp-voyage
url: https://github.com/crs48/warp-voyage
icon: github
star: true
stars: build
- label: tunnel browser game
url: https://crs48.github.io/warp-voyage
icon: globe
- label: cause (Clojure EDN CRDT)
url: https://github.com/crs48/cause
icon: github
star: true
stars: build
- label: dome
url: https://github.com/crs48/dome
icon: github
star: true
stars: build
- label: dome home explorations
url: https://crs48.github.io/dome
icon: globe
- label: food-forests
url: https://github.com/crs48/food-forests
icon: github
star: true
stars: build
- label: food forest explorations
url: https://crs48.github.io/food-forests
icon: globe
- label: floor-life
url: https://github.com/crs48/floor-life
icon: github
star: true
stars: build
- label: floor life explorations
url: https://crs48.github.io/floor-life
icon: globe
- label: ai-explained
url: https://github.com/crs48/ai-explained
icon: github
star: true
stars: build
- label: how ai works for ludites
url: https://crs48.github.io/ai-explained
icon: globe
# --- Rich content blocks (optional, ordered) ---
# An ordered list of typed blocks rendered between your links and the social row.
# Every block is validated data — never raw HTML — so it stays safe and simple.
# Four tiers, all with ZERO of our JavaScript: (1) static HTML/CSS, (2) third-
# party form POST, (3) live provider iframes (privacy-safe defaults), and
# (4) build-time embeds (baked to static HTML, refreshed on rebuild).
blocks:
- type: divider
label: Like this site?
- type: heading
text: Thanks! Want to build your own?
- type: text
markdown: >
I made LIBCard as a free, fast, **zero-JavaScript** link-in-bio page and virtual business
card you host yourself on GitHub Pages. Edit one file, save, done.
- type: faq
items:
- q: Is it really free?
a: Yes — it runs on GitHub Pages with no server and no subscription.
- q: Can I use my own domain?
a: Yes. Add a CNAME and set site.base to "/".
- q: Can I embed content?
a: Yup. Video, maps, music, forms, and more.
- type: divider
label: Contact Me
- type: contact-buttons
call: true # uses contact.phone above; or set a number string
email: true # uses contact.email above
# --- More block types you can add (uncomment and edit) ---
# - { type: booking, provider: calcom, url: https://cal.com/you/30min, title: Book a call }
# - { type: video, provider: youtube, id: dQw4w9WgXcQ, title: My talk } # click-to-load facade
# - { type: embed, provider: spotify, url: https://open.spotify.com/track/ID }
# - { type: embed, provider: figma, url: https://www.figma.com/design/KEY/Title }
# - { type: map, provider: gmaps, src: "https://www.google.com/maps/embed?pb=..." }
# - { type: signup, provider: buttondown, username: you, title: Newsletter }
# - { type: tweet, url: https://x.com/you/status/1750000000000000000 } # baked at build time
# - { type: rss, url: https://yourblog.com/feed.xml, title: Latest posts }
# - { type: github, user: you, repo: yourrepo }
# --- Look & feel ---
# Pick ONE theme (zero JavaScript):
#
# theme: midnight # default | midnight | sunset | mono | paper | terminal
#
# ...or turn on the live theme switcher / random mode so visitors can see the
# themes on the page (these are the only features that ship a little JavaScript):
theme:
name: default # the default everyone sees first (and crawlers/no-JS visitors)
switcher: true # show the "Try a theme" button (cycles through ALL themes)
# Random mode: `true` randomizes over every theme; an array curates the pool —
# only these land on a random reload, while the switcher still rotates through
# all of them. Here: my hand-picked set for the page's first impression.
random: [default, paper, frost, dusk, dawn, mist]
animate: true # animate the change with a circular reveal
# allow: [midnight, sunset, terminal, paper] # optional subset; omit = all themes
# --- Footer credit ---
# "Powered by LibCard · Theme by <author>". Both default on.
footer:
poweredBy: true # set false to drop "Powered by LibCard" (it's MIT)
themeCredit: true # "Theme by <author>" — required for CC-BY themes regardless
# --- First-run nudge (template only, off by default) ---
# A fresh "Use this template" card can show a subtle "edit libcard.config.yaml"
# banner until it's customized. Uncomment to switch it on, then delete it once the
# card is yours — a real, customized card should never show the nudge.
# meta:
# default: true
# --- SEO / link previews (optional) ---
seo:
description: Building xNet — a local-first platform for apps that work offline, sync peer-to-peer, and keep your data under your control
# ogImage: /og.png # optional custom Open Graph image (a /public path or URL)
# --- Landscape "card mode" (rotate your phone to flash a business card) ---
# Turn the phone sideways and the page flips into a pretty, physical-looking
# business card — your name beside a QR code — so you can flash it at someone and
# rotate back to the full page. The reveal is pure CSS (zero JavaScript); the only
# script is the optional screen wake lock, shipped solely when `wakeLock: true`.
# Omit this whole block to accept the defaults below.
cardMode:
enabled: true # show the landscape card overlay (and a portrait "rotate" hint)
qr: page # what the QR encodes: page (your link-in-bio) | contact (save offline) | both
hint: true # the subtle "⟲ Rotate to show your card" nudge in portrait
wakeLock: false # opt-in: keep the screen lit while the card shows (ships a tiny script)
# --- Analytics (optional, OFF by default) ---
# Privacy-first and cookieless — no consent banner, no per-person tracking.
# OMIT this whole block and the page ships ZERO analytics — and, if nothing else
# opts into JS, stays zero-JS. Two honesty tiers, just like the `stars` modes:
# • GoatCounter `mode: pixel` — a single <img>. ZERO JavaScript. Counts
# pageviews + referrers, but cannot see outbound link clicks.
# • umami / plausible / cloudflare (or goatcounter `mode: script`) — a small
# (~1–2 KB) cookieless beacon that ALSO tracks which links people click.
# The provider id/domain/token are public (no secrets), so they live right here.
analytics:
provider: goatcounter # cookieless, no consent banner; pixel mode ships zero JS
code: libcard # -> libcard.goatcounter.com
mode: pixel # zero-JS <img> beacon: pageviews + referrers (no outbound clicks)
# --- or a beacon that ALSO tracks outbound link clicks (swap in one) ---
# provider: umami
# websiteId: 00000000-0000-0000-0000-000000000000
# outboundClicks: true # auto-tag external links as "outbound" events
# provider: plausible
# domain: crs48.github.io # the domain registered in Plausible
# provider: cloudflare
# token: your-web-analytics-token # note: Cloudflare can't track outbound clicks
# --- Where this site lives (the setup wizard fills these in) ---
# url: your GitHub Pages origin, e.g. https://you.github.io
# base: the sub-path. "/repo-name" for project pages, "/" for a user site or
# a custom domain. Getting `base` wrong is the #1 cause of broken assets.
site:
url: https://crs.land
base: /