+6
-6
src/components/ProfileForm.astro
+6
-6
src/components/ProfileForm.astro
···
26
>
27
<div class="form-control">
28
<label class="label">
29
-
<span class="label-text">Display Name</span>
30
<span class="label-text-alt">Max 64 characters</span>
31
</label>
32
<input
33
type="text"
34
name="displayName"
35
-
placeholder="Enter your display name"
36
class="input input-bordered w-full"
37
value={displayName}
38
maxlength="64"
···
42
43
<div class="form-control">
44
<label class="label">
45
-
<span class="label-text">Avatar</span>
46
-
<span class="label-text-alt">PNG or JPEG, max 1MB</span>
47
</label>
48
{avatar && (
49
<div class="avatar mb-2">
···
63
<div class="form-control">
64
<label class="label">
65
<span class="label-text">Bio</span>
66
-
<span class="label-text-alt">Max 256 characters</span>
67
</label><br />
68
<textarea
69
-
name="about"
70
placeholder="If you are a speaker, this is displayed as your bio. Use About for extended background"
71
class="textarea textarea-bordered h-24 w-full"
72
maxlength="256"
···
26
>
27
<div class="form-control">
28
<label class="label">
29
+
<span class="label-text">Attendee Name</span>
30
<span class="label-text-alt">Max 64 characters</span>
31
</label>
32
<input
33
type="text"
34
name="displayName"
35
+
placeholder="This is the display name that will be shown as your attendee name."
36
class="input input-bordered w-full"
37
value={displayName}
38
maxlength="64"
···
42
43
<div class="form-control">
44
<label class="label">
45
+
<span class="label-text">Attendee Image</span>
46
+
<span class="label-text-alt">Your public attendee image. PNG or JPEG, max 1MB</span>
47
</label>
48
{avatar && (
49
<div class="avatar mb-2">
···
63
<div class="form-control">
64
<label class="label">
65
<span class="label-text">Bio</span>
66
+
<span class="label-text-alt">A short biography, displayed as speaker bios. Max 256 characters</span>
67
</label><br />
68
<textarea
69
+
name="shortbio"
70
placeholder="If you are a speaker, this is displayed as your bio. Use About for extended background"
71
class="textarea textarea-bordered h-24 w-full"
72
maxlength="256"
+4
-6
src/lexicon/types/org/atmosphereconf/profile.ts
+4
-6
src/lexicon/types/org/atmosphereconf/profile.ts
···
14
export interface Main {
15
$type: 'org.atmosphereconf.profile'
16
displayName?: string
17
/** Free-form profile description text. */
18
-
description?: string
19
/** Profile picture for conference attendee */
20
avatar?: BlobRef
21
/** Larger horizontal image to display behind profile view. */
···
35
return validate<Main & V>(v, id, hashMain, true)
36
}
37
38
-
export {
39
-
type Main as Record,
40
-
isMain as isRecord,
41
-
validateMain as validateRecord,
42
-
}
···
14
export interface Main {
15
$type: 'org.atmosphereconf.profile'
16
displayName?: string
17
+
/** Bio for speakers */
18
+
shortbio?: string
19
/** Free-form profile description text. */
20
+
about?: string
21
/** Profile picture for conference attendee */
22
avatar?: BlobRef
23
/** Larger horizontal image to display behind profile view. */
···
37
return validate<Main & V>(v, id, hashMain, true)
38
}
39
40
+
export { type Main as Record, isMain as isRecord, validateMain as validateRecord }
+2
-2
src/pages/index.astro
+2
-2
src/pages/index.astro
···
34
const displayName = profile?.displayName || agent?.assertDid || 'User'
35
const handle = profile?.handle || agent?.assertDid || ''
36
const avatar = profile?.avatar
37
-
const description = profile?.description
38
---
39
40
<html lang="en" data-theme="dracula">
···
64
)}
65
<p class="text-lg font-semibold">{displayName}</p>
66
<p class="text-sm opacity-70">{handle}</p>
67
-
{description && <p class="text-sm mt-2 opacity-80">{description}</p>}
68
</div>
69
<div class="space-y-2 w-full">
70
<a href={`/profile/${handle}`} class="btn btn-primary w-full">
···
34
const displayName = profile?.displayName || agent?.assertDid || 'User'
35
const handle = profile?.handle || agent?.assertDid || ''
36
const avatar = profile?.avatar
37
+
const shortbio = profile?.shortbio
38
---
39
40
<html lang="en" data-theme="dracula">
···
64
)}
65
<p class="text-lg font-semibold">{displayName}</p>
66
<p class="text-sm opacity-70">{handle}</p>
67
+
{shortbio && <p class="text-sm mt-2 opacity-80">{shortbio}</p>}
68
</div>
69
<div class="space-y-2 w-full">
70
<a href={`/profile/${handle}`} class="btn btn-primary w-full">
+3
-3
src/pages/profile/[handle].astro
+3
-3
src/pages/profile/[handle].astro
···
80
}
81
82
const displayName = conferenceProfile?.displayName || profile?.displayName || handle
83
-
const description = conferenceProfile?.description || profile?.description || ''
84
85
// Handle both blob refs and direct URLs
86
let avatar = ''
···
159
)}
160
</div>
161
162
-
{description && (
163
-
<p class="mt-4 text-base whitespace-pre-wrap">{description}</p>
164
)}
165
166
<div class="mt-4">
···
80
}
81
82
const displayName = conferenceProfile?.displayName || profile?.displayName || handle
83
+
const shortbio = conferenceProfile?.shortbio || profile?.description || ''
84
85
// Handle both blob refs and direct URLs
86
let avatar = ''
···
159
)}
160
</div>
161
162
+
{shortbio && (
163
+
<p class="mt-4 text-base whitespace-pre-wrap">{shortbio}</p>
164
)}
165
166
<div class="mt-4">