···11# blento
2233-WORK IN PROGRESS, not ready for use yet.
33+WORK IN PROGRESS, not ready for use yet, but you can test it out at: https://blento.app
44+55+your personal website in a bento style layout, using your bluesky PDS as a backend.
66+77+made with svelte, tailwind.
88+99+1010+## Selfhosting
1111+1212+- fork this repo
1313+- create a cloudflare worker application and connect it to your fork
1414+- change the vars in `wranger.jsonc`
1515+1616+```json
1717+ "vars": {
1818+ "PUBLIC_HANDLE": "your-bluesky-handle",
1919+ "PUBLIC_IS_SELFHOSTED": "true",
2020+ "PUBLIC_DOMAIN": "https://your-cloudflare-worker-or-custom-domain.com"
2121+ }
2222+```
42355-your personal website in a bento style layout, using your PDS as a backend.2424+DONE :)
···44export const data = {
55 'app.bsky.actor.profile': ['self'],
6677- 'com.example.bento': 'all'
77+ 'app.blento.card': 'all'
88} as const;
+3-3
src/routes/+page.server.ts
···11import { loadData } from '$lib/website/utils';
22-import { env } from '$env/dynamic/private';
22+import { env } from '$env/dynamic/public';
3344export async function load() {
55- const data = await loadData(env.MAIN_HANDLE);
66- return { ...data, handle: env.MAIN_HANDLE };
55+ const data = await loadData(env.PUBLIC_HANDLE);
66+ return { ...data, handle: env.PUBLIC_HANDLE };
77}
+1-1
src/routes/+page.svelte
···1111 {data}
1212 handle={data.handle}
1313 did={data.did}
1414- items={Object.values(data.data['com.example.bento']).map((i) => i.value) as Item[]}
1414+ items={Object.values(data.data['app.blento.card']).map((i) => i.value) as Item[]}
1515/>
+1-1
src/routes/[handle]/+layout.server.ts
···33import { error } from '@sveltejs/kit';
4455export async function load({ params }) {
66- if (env.ONLY_ALLOW_MAIN_HANDLE) error(404);
66+ if (env.PUBLIC_IS_SELFHOSTED) error(404);
77 return await loadData(params.handle);
88}
+1-1
src/routes/[handle]/+page.svelte
···1111 {data}
1212 handle={page.params.handle}
1313 did={data.did}
1414- items={Object.values(data.data['com.example.bento']).map((i) => i.value) as Item[]}
1414+ items={Object.values(data.data['app.blento.card']).map((i) => i.value) as Item[]}
1515/>
+1-1
src/routes/[handle]/edit/+page.svelte
···1010 handle={page.params.handle}
1111 did={data.did}
1212 {data}
1313- items={Object.values(data.data['com.example.bento']).map((i) => i.value) as Item[]}
1313+ items={Object.values(data.data['app.blento.card']).map((i) => i.value) as Item[]}
1414/>
+3-3
src/routes/edit/+page.server.ts
···11import { loadData } from '$lib/website/utils';
22-import { env } from '$env/dynamic/private';
22+import { env } from '$env/dynamic/public';
3344export async function load() {
55- const data = await loadData(env.MAIN_HANDLE);
66- return { ...data, handle: env.MAIN_HANDLE };
55+ const data = await loadData(env.PUBLIC_HANDLE);
66+ return { ...data, handle: env.PUBLIC_HANDLE };
77}
+1-1
src/routes/edit/+page.svelte
···1010 handle={data.handle}
1111 did={data.did}
1212 {data}
1313- items={Object.values(data.data['com.example.bento']).map((i) => i.value) as Item[]}
1313+ items={Object.values(data.data['app.blento.card']).map((i) => i.value) as Item[]}
1414/>
+11
todo.md
···11+# todo
22+33+- video card
44+- github card
55+- instagram card
66+- edit already created cards (e.g. change link)
77+- link card: save favicon and og image to pds
88+99+1010+- allow setting custom base and accent color
1111+- allow changing avatar and description to be different than bluesky
+5-1
wrangler.jsonc
···3232 * Note: Use secrets to store sensitive data.
3333 * https://developers.cloudflare.com/workers/configuration/secrets/
3434 */
3535- "vars": { "MAIN_HANDLE": "flo-bit.dev" }
3535+ "vars": {
3636+ "PUBLIC_HANDLE": "blento.app",
3737+ "PUBLIC_IS_SELFHOSTED": "",
3838+ "PUBLIC_DOMAIN": "https://blento.app"
3939+ }
3640 /**
3741 * Service Bindings (communicate between multiple Workers)
3842 * https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings