tangled
alpha
login
or
join now
flo-bit.dev
/
blento
your personal website on atproto - mirror
blento.app
20
fork
atom
overview
issues
pulls
pipelines
small fixes
Florian
3 weeks ago
682b03f5
c72037d9
+39
-5
5 changed files
expand all
collapse all
unified
split
src
lib
cards
BaseCard
BaseCard.svelte
BigSocialCard
index.ts
GameCards
DinoGameCard
DinoGameCard.svelte
TextCard
TextCard.svelte
routes
api
reloadRecent
+server.ts
+1
-1
src/lib/cards/BaseCard/BaseCard.svelte
···
40
40
bind:this={ref}
41
41
draggable={isEditing}
42
42
class={[
43
43
-
'card group focus-within:outline-accent-500 @container/card absolute z-0 rounded-3xl outline-offset-2 transition-all duration-200 focus-within:outline-2 isolate',
43
43
+
'card group selection:bg-accent-600/50 focus-within:outline-accent-500 @container/card absolute z-0 rounded-3xl outline-offset-2 transition-all duration-200 focus-within:outline-2 isolate',
44
44
color ? (colors[color] ?? colors.accent) : colors.base,
45
45
color !== 'accent' && item.color !== 'base' && item.color !== 'transparent' ? color : '',
46
46
showOutline ? 'outline-2' : '',
+9
src/lib/cards/BigSocialCard/index.ts
···
154
154
medium: siMedium,
155
155
devto: siDevdotto,
156
156
hashnode: siHashnode,
157
157
+
linkedin: {
158
158
+
slug: 'linkedin',
159
159
+
path: '',
160
160
+
title: 'LinkedIn',
161
161
+
hex: '0A66C2',
162
162
+
source: 'https://brand.linkedin.com',
163
163
+
guidelines: 'https://brand.linkedin.com/policies',
164
164
+
svg: `<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>LinkedIn</title><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>`
165
165
+
},
157
166
158
167
// support / monetization
159
168
patreon: siPatreon,
+3
-3
src/lib/cards/GameCards/DinoGameCard/DinoGameCard.svelte
···
442
442
drawSprite(playerSprite, player.x, playerY, player.width, drawHeight);
443
443
444
444
// Draw score
445
445
-
ctx.fillStyle = '#000000';
445
445
+
ctx.fillStyle = '#ffffff';
446
446
ctx.font = `bold ${Math.max(12, Math.floor(14 * (scale / 2.5)))}px monospace`;
447
447
ctx.textAlign = 'right';
448
448
ctx.fillText(String(score).padStart(5, '0'), canvasWidth - 10, 25);
449
449
450
450
if (highScore > 0) {
451
451
-
ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';
451
451
+
ctx.fillStyle = 'rgba(256, 256, 256, 0.5)';
452
452
ctx.fillText(
453
453
'HI ' + String(highScore).padStart(5, '0'),
454
454
canvasWidth - 70 * (scale / 2.5),
···
458
458
459
459
// Draw game over text (no overlay background)
460
460
if (gameState === 'gameover') {
461
461
-
ctx.fillStyle = '#000000';
461
461
+
ctx.fillStyle = '#ffffff';
462
462
ctx.font = `bold ${Math.max(14, Math.floor(20 * (scale / 2.5)))}px monospace`;
463
463
ctx.textAlign = 'center';
464
464
ctx.fillText('GAME OVER', canvasWidth / 2, canvasHeight / 2 - 40);
+1
-1
src/lib/cards/TextCard/TextCard.svelte
···
13
13
14
14
<div
15
15
class={cn(
16
16
-
'prose dark:prose-invert prose-neutral prose-sm prose-a:no-underline prose-a:text-accent-600 dark:prose-a:text-accent-400 accent:prose-a:text-accent-950 accent:prose-a:underline accent:prose-p:text-base-900 prose-p:first:mt-0 prose-p:last:mb-0 prose-headings:first:mt-0 prose-headings:last:mb-0 inline-flex h-full min-h-full w-full max-w-none overflow-y-scroll rounded-md p-3 text-lg',
16
16
+
'prose dark:prose-invert prose-neutral prose-sm prose-a:no-underline prose-a:text-accent-600 dark:prose-a:text-accent-400 accent:prose-a:text-accent-950 accent:prose-a:underline accent:prose-p:text-base-900 prose-p:first:mt-0 prose-p:last:mb-0 prose-headings:first:mt-0 prose-headings:last:mb-0 inline-flex h-full min-h-full w-full max-w-none overflow-y-scroll rounded-md p-3 text-lg overflow-x-hidden',
17
17
textAlignClasses?.[item.cardData.textAlign as string],
18
18
verticalAlignClasses[item.cardData.verticalAlign as string],
19
19
textSizeClasses[(item.cardData.textSize ?? 0) as number]
+25
src/routes/api/reloadRecent/+server.ts
···
1
1
+
import { getProfile } from '$lib/oauth/atproto';
2
2
+
import type { ProfileViewDetailed } from '@atproto/api/dist/client/types/app/bsky/actor/defs';
3
3
+
import { json } from '@sveltejs/kit';
4
4
+
5
5
+
export async function GET({ platform }) {
6
6
+
if (!platform?.env?.USER_DATA_CACHE) return json('no cache');
7
7
+
const existingUsers = await platform?.env?.USER_DATA_CACHE?.get('updatedBlentos');
8
8
+
9
9
+
const existingUsersArray: ProfileViewDetailed[] = existingUsers ? JSON.parse(existingUsers) : [];
10
10
+
11
11
+
const existingUsersSet = new Set(existingUsersArray.map((v) => v.did));
12
12
+
13
13
+
const newProfilesPromises: Promise<ProfileViewDetailed>[] = [];
14
14
+
for (const did of Array.from(existingUsersSet)) {
15
15
+
const profile = getProfile({ did });
16
16
+
newProfilesPromises.push(profile);
17
17
+
if (newProfilesPromises.length > 20) break;
18
18
+
}
19
19
+
20
20
+
const newProfiles = await Promise.all(newProfilesPromises);
21
21
+
22
22
+
await platform?.env?.USER_DATA_CACHE.put('updatedBlentos', JSON.stringify(newProfiles));
23
23
+
24
24
+
return json('ok');
25
25
+
}