Enhance UI and Configuration:

- Added missing `type="button"` attributes to various toolbar buttons in the rich-input component for better accessibility.
- Updated Gengar template to ensure the summary section is only displayed when populated.
- Changed boolean values in Docker Compose files from unquoted to quoted strings for consistency and to prevent potential parsing issues.
This commit is contained in:
Amruth Pillai
2025-01-12 16:50:07 +01:00
parent d0a07686a5
commit d1a5a41e4d
8 changed files with 67 additions and 42 deletions
+1
View File
@@ -84,6 +84,7 @@ const Header = () => {
const Summary = () => { const Summary = () => {
const section = useArtboardStore((state) => state.resume.sections.summary); const section = useArtboardStore((state) => state.resume.sections.summary);
const primaryColor = useArtboardStore((state) => state.resume.metadata.theme.primary); const primaryColor = useArtboardStore((state) => state.resume.metadata.theme.primary);
if (!section.visible || isEmptyString(section.content)) return null; if (!section.visible || isEmptyString(section.content)) return null;
return ( return (
+33 -9
View File
@@ -71,12 +71,15 @@ const InsertImageForm = ({ onInsert }: InsertImageProps) => {
return ( return (
<Form {...form}> <Form {...form}>
<form className="space-y-3" <form
onSubmit={(e) => { className="space-y-3"
e.stopPropagation(); onSubmit={async (event) => {
e.preventDefault(); event.stopPropagation();
form.handleSubmit(onSubmit)(); event.preventDefault();
}}>
await form.handleSubmit(onSubmit)();
}}
>
<p className="prose prose-sm prose-zinc dark:prose-invert"> <p className="prose prose-sm prose-zinc dark:prose-invert">
Insert an image from an external URL and use it on your resume. Insert an image from an external URL and use it on your resume.
</p> </p>
@@ -144,6 +147,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Bold"> <Tooltip content="Bold">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive("bold")} pressed={editor.isActive("bold")}
disabled={!editor.can().chain().toggleBold().run()} disabled={!editor.can().chain().toggleBold().run()}
onPressedChange={() => editor.chain().focus().toggleBold().run()} onPressedChange={() => editor.chain().focus().toggleBold().run()}
@@ -155,6 +159,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Italic"> <Tooltip content="Italic">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive("italic")} pressed={editor.isActive("italic")}
disabled={!editor.can().chain().focus().toggleItalic().run()} disabled={!editor.can().chain().focus().toggleItalic().run()}
onPressedChange={() => editor.chain().focus().toggleItalic().run()} onPressedChange={() => editor.chain().focus().toggleItalic().run()}
@@ -166,6 +171,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Strikethrough"> <Tooltip content="Strikethrough">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive("strike")} pressed={editor.isActive("strike")}
disabled={!editor.can().chain().focus().toggleStrike().run()} disabled={!editor.can().chain().focus().toggleStrike().run()}
onPressedChange={() => editor.chain().focus().toggleStrike().run()} onPressedChange={() => editor.chain().focus().toggleStrike().run()}
@@ -177,6 +183,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Underline"> <Tooltip content="Underline">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive("underline")} pressed={editor.isActive("underline")}
disabled={!editor.can().chain().focus().toggleUnderline().run()} disabled={!editor.can().chain().focus().toggleUnderline().run()}
onPressedChange={() => editor.chain().focus().toggleUnderline().run()} onPressedChange={() => editor.chain().focus().toggleUnderline().run()}
@@ -188,6 +195,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Highlight"> <Tooltip content="Highlight">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive("highlight")} pressed={editor.isActive("highlight")}
disabled={!editor.can().chain().focus().toggleHighlight().run()} disabled={!editor.can().chain().focus().toggleHighlight().run()}
onPressedChange={() => editor.chain().focus().toggleHighlight().run()} onPressedChange={() => editor.chain().focus().toggleHighlight().run()}
@@ -205,6 +213,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Inline Code"> <Tooltip content="Inline Code">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive("code")} pressed={editor.isActive("code")}
disabled={!editor.can().chain().focus().toggleCode().run()} disabled={!editor.can().chain().focus().toggleCode().run()}
onPressedChange={() => editor.chain().focus().toggleCode().run()} onPressedChange={() => editor.chain().focus().toggleCode().run()}
@@ -216,6 +225,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Code Block"> <Tooltip content="Code Block">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive("codeBlock")} pressed={editor.isActive("codeBlock")}
disabled={!editor.can().chain().focus().toggleCodeBlock().run()} disabled={!editor.can().chain().focus().toggleCodeBlock().run()}
onPressedChange={() => editor.chain().focus().toggleCodeBlock().run()} onPressedChange={() => editor.chain().focus().toggleCodeBlock().run()}
@@ -227,6 +237,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Heading 1"> <Tooltip content="Heading 1">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive("heading", { level: 1 })} pressed={editor.isActive("heading", { level: 1 })}
disabled={!editor.can().chain().focus().toggleHeading({ level: 1 }).run()} disabled={!editor.can().chain().focus().toggleHeading({ level: 1 }).run()}
onPressedChange={() => editor.chain().focus().toggleHeading({ level: 1 }).run()} onPressedChange={() => editor.chain().focus().toggleHeading({ level: 1 }).run()}
@@ -238,6 +249,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Heading 2"> <Tooltip content="Heading 2">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive("heading", { level: 2 })} pressed={editor.isActive("heading", { level: 2 })}
disabled={!editor.can().chain().focus().toggleHeading({ level: 2 }).run()} disabled={!editor.can().chain().focus().toggleHeading({ level: 2 }).run()}
onPressedChange={() => editor.chain().focus().toggleHeading({ level: 2 }).run()} onPressedChange={() => editor.chain().focus().toggleHeading({ level: 2 }).run()}
@@ -249,6 +261,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Heading 3"> <Tooltip content="Heading 3">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive("heading", { level: 3 })} pressed={editor.isActive("heading", { level: 3 })}
disabled={!editor.can().chain().focus().toggleHeading({ level: 3 }).run()} disabled={!editor.can().chain().focus().toggleHeading({ level: 3 }).run()}
onPressedChange={() => editor.chain().focus().toggleHeading({ level: 3 }).run()} onPressedChange={() => editor.chain().focus().toggleHeading({ level: 3 }).run()}
@@ -260,6 +273,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Paragraph"> <Tooltip content="Paragraph">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive("paragraph")} pressed={editor.isActive("paragraph")}
onPressedChange={() => editor.chain().focus().setParagraph().run()} onPressedChange={() => editor.chain().focus().setParagraph().run()}
> >
@@ -270,6 +284,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Align Left"> <Tooltip content="Align Left">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive({ textAlign: "left" })} pressed={editor.isActive({ textAlign: "left" })}
disabled={!editor.can().chain().focus().setTextAlign("left").run()} disabled={!editor.can().chain().focus().setTextAlign("left").run()}
onPressedChange={() => editor.chain().focus().setTextAlign("left").run()} onPressedChange={() => editor.chain().focus().setTextAlign("left").run()}
@@ -281,6 +296,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Align Center"> <Tooltip content="Align Center">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive({ textAlign: "center" })} pressed={editor.isActive({ textAlign: "center" })}
disabled={!editor.can().chain().focus().setTextAlign("center").run()} disabled={!editor.can().chain().focus().setTextAlign("center").run()}
onPressedChange={() => editor.chain().focus().setTextAlign("center").run()} onPressedChange={() => editor.chain().focus().setTextAlign("center").run()}
@@ -292,6 +308,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Align Right"> <Tooltip content="Align Right">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive({ textAlign: "right" })} pressed={editor.isActive({ textAlign: "right" })}
disabled={!editor.can().chain().focus().setTextAlign("right").run()} disabled={!editor.can().chain().focus().setTextAlign("right").run()}
onPressedChange={() => editor.chain().focus().setTextAlign("right").run()} onPressedChange={() => editor.chain().focus().setTextAlign("right").run()}
@@ -303,6 +320,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Align Justify"> <Tooltip content="Align Justify">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive({ textAlign: "justify" })} pressed={editor.isActive({ textAlign: "justify" })}
disabled={!editor.can().chain().focus().setTextAlign("justify").run()} disabled={!editor.can().chain().focus().setTextAlign("justify").run()}
onPressedChange={() => editor.chain().focus().setTextAlign("justify").run()} onPressedChange={() => editor.chain().focus().setTextAlign("justify").run()}
@@ -314,6 +332,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Bullet List"> <Tooltip content="Bullet List">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive("bulletList")} pressed={editor.isActive("bulletList")}
disabled={!editor.can().chain().focus().toggleBulletList().run()} disabled={!editor.can().chain().focus().toggleBulletList().run()}
onPressedChange={() => editor.chain().focus().toggleBulletList().run()} onPressedChange={() => editor.chain().focus().toggleBulletList().run()}
@@ -325,6 +344,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Numbered List"> <Tooltip content="Numbered List">
<Toggle <Toggle
size="sm" size="sm"
type="button"
pressed={editor.isActive("orderedList")} pressed={editor.isActive("orderedList")}
disabled={!editor.can().chain().focus().toggleOrderedList().run()} disabled={!editor.can().chain().focus().toggleOrderedList().run()}
onPressedChange={() => editor.chain().focus().toggleOrderedList().run()} onPressedChange={() => editor.chain().focus().toggleOrderedList().run()}
@@ -336,6 +356,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Outdent"> <Tooltip content="Outdent">
<Button <Button
size="sm" size="sm"
type="button"
variant="ghost" variant="ghost"
className="px-2" className="px-2"
disabled={!editor.can().chain().focus().liftListItem("listItem").run()} disabled={!editor.can().chain().focus().liftListItem("listItem").run()}
@@ -348,6 +369,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Indent"> <Tooltip content="Indent">
<Button <Button
size="sm" size="sm"
type="button"
variant="ghost" variant="ghost"
className="px-2" className="px-2"
disabled={!editor.can().chain().focus().sinkListItem("listItem").run()} disabled={!editor.can().chain().focus().sinkListItem("listItem").run()}
@@ -360,7 +382,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Popover> <Popover>
<Tooltip content="Insert Image"> <Tooltip content="Insert Image">
<PopoverTrigger asChild> <PopoverTrigger asChild>
<Button size="sm" variant="ghost" className="px-2"> <Button type="button" size="sm" variant="ghost" className="px-2">
<ImageIcon /> <ImageIcon />
</Button> </Button>
</PopoverTrigger> </PopoverTrigger>
@@ -373,9 +395,9 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Insert Break Line"> <Tooltip content="Insert Break Line">
<Button <Button
size="sm" size="sm"
type="button"
variant="ghost" variant="ghost"
className="px-2" className="px-2"
type="button"
disabled={!editor.can().chain().focus().setHardBreak().run()} disabled={!editor.can().chain().focus().setHardBreak().run()}
onClick={() => editor.chain().focus().setHardBreak().run()} onClick={() => editor.chain().focus().setHardBreak().run()}
> >
@@ -386,9 +408,9 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Insert Horizontal Rule"> <Tooltip content="Insert Horizontal Rule">
<Button <Button
size="sm" size="sm"
type="button"
variant="ghost" variant="ghost"
className="px-2" className="px-2"
type="button"
disabled={!editor.can().chain().focus().setHorizontalRule().run()} disabled={!editor.can().chain().focus().setHorizontalRule().run()}
onClick={() => editor.chain().focus().setHorizontalRule().run()} onClick={() => editor.chain().focus().setHorizontalRule().run()}
> >
@@ -399,6 +421,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Undo"> <Tooltip content="Undo">
<Button <Button
size="sm" size="sm"
type="button"
variant="ghost" variant="ghost"
className="px-2" className="px-2"
disabled={!editor.can().undo()} disabled={!editor.can().undo()}
@@ -411,6 +434,7 @@ const Toolbar = ({ editor }: { editor: Editor }) => {
<Tooltip content="Redo"> <Tooltip content="Redo">
<Button <Button
size="sm" size="sm"
type="button"
variant="ghost" variant="ghost"
className="px-2" className="px-2"
disabled={!editor.can().redo()} disabled={!editor.can().redo()}
+2 -2
View File
@@ -60,8 +60,8 @@ services:
TIMEOUT: 10000 TIMEOUT: 10000
CONCURRENT: 10 CONCURRENT: 10
TOKEN: ${CHROME_TOKEN:-chrome_token} TOKEN: ${CHROME_TOKEN:-chrome_token}
EXIT_ON_HEALTH_FAILURE: true EXIT_ON_HEALTH_FAILURE: "true"
PRE_REQUEST_HEALTH_CHECK: true PRE_REQUEST_HEALTH_CHECK: "true"
volumes: volumes:
minio_data: minio_data:
+7 -7
View File
@@ -45,8 +45,8 @@ services:
TIMEOUT: 10000 TIMEOUT: 10000
CONCURRENT: 10 CONCURRENT: 10
TOKEN: chrome_token TOKEN: chrome_token
EXIT_ON_HEALTH_FAILURE: true EXIT_ON_HEALTH_FAILURE: "true"
PRE_REQUEST_HEALTH_CHECK: true PRE_REQUEST_HEALTH_CHECK: "true"
app: app:
image: amruthpillai/reactive-resume:latest image: amruthpillai/reactive-resume:latest
@@ -86,16 +86,16 @@ services:
STORAGE_BUCKET: default STORAGE_BUCKET: default
STORAGE_ACCESS_KEY: minioadmin STORAGE_ACCESS_KEY: minioadmin
STORAGE_SECRET_KEY: minioadmin STORAGE_SECRET_KEY: minioadmin
STORAGE_USE_SSL: false STORAGE_USE_SSL: "false"
STORAGE_SKIP_BUCKET_CHECK: false STORAGE_SKIP_BUCKET_CHECK: "false"
# -- Crowdin (Optional) -- # -- Crowdin (Optional) --
# CROWDIN_PROJECT_ID: # CROWDIN_PROJECT_ID:
# CROWDIN_PERSONAL_TOKEN: # CROWDIN_PERSONAL_TOKEN:
# -- Feature Flags (Optional) -- # -- Feature Flags (Optional) --
# DISABLE_SIGNUPS: false # DISABLE_SIGNUPS: "false"
# DISABLE_EMAIL_AUTH: false # DISABLE_EMAIL_AUTH: "false"
# -- GitHub (Optional) -- # -- GitHub (Optional) --
# GITHUB_CLIENT_ID: github_client_id # GITHUB_CLIENT_ID: github_client_id
@@ -118,7 +118,7 @@ services:
- nginx_data:/data - nginx_data:/data
- letsencrypt_data:/etc/letsencrypt - letsencrypt_data:/etc/letsencrypt
environment: environment:
DISABLE_IPV6: true DISABLE_IPV6: "true"
volumes: volumes:
minio_data: minio_data:
+6 -6
View File
@@ -42,8 +42,8 @@ services:
TIMEOUT: 10000 TIMEOUT: 10000
CONCURRENT: 10 CONCURRENT: 10
TOKEN: chrome_token TOKEN: chrome_token
EXIT_ON_HEALTH_FAILURE: 'true' EXIT_ON_HEALTH_FAILURE: "true"
PRE_REQUEST_HEALTH_CHECK: 'true' PRE_REQUEST_HEALTH_CHECK: "true"
app: app:
image: amruthpillai/reactive-resume:latest image: amruthpillai/reactive-resume:latest
@@ -85,16 +85,16 @@ services:
STORAGE_BUCKET: default STORAGE_BUCKET: default
STORAGE_ACCESS_KEY: minioadmin STORAGE_ACCESS_KEY: minioadmin
STORAGE_SECRET_KEY: minioadmin STORAGE_SECRET_KEY: minioadmin
STORAGE_USE_SSL: 'false' STORAGE_USE_SSL: "false"
STORAGE_SKIP_BUCKET_CHECK: 'false' STORAGE_SKIP_BUCKET_CHECK: "false"
# -- Crowdin (Optional) -- # -- Crowdin (Optional) --
# CROWDIN_PROJECT_ID: # CROWDIN_PROJECT_ID:
# CROWDIN_PERSONAL_TOKEN: # CROWDIN_PERSONAL_TOKEN:
# -- Email (Optional) -- # -- Email (Optional) --
# DISABLE_SIGNUPS: 'false' # DISABLE_SIGNUPS: "false"
# DISABLE_EMAIL_AUTH: 'false' # DISABLE_EMAIL_AUTH: "false"
# -- GitHub (Optional) -- # -- GitHub (Optional) --
# GITHUB_CLIENT_ID: github_client_id # GITHUB_CLIENT_ID: github_client_id
+6 -6
View File
@@ -57,8 +57,8 @@ services:
TIMEOUT: 10000 TIMEOUT: 10000
CONCURRENT: 10 CONCURRENT: 10
TOKEN: chrome_token TOKEN: chrome_token
EXIT_ON_HEALTH_FAILURE: true EXIT_ON_HEALTH_FAILURE: "true"
PRE_REQUEST_HEALTH_CHECK: true PRE_REQUEST_HEALTH_CHECK: "true"
deploy: deploy:
replicas: 2 replicas: 2
restart_policy: restart_policy:
@@ -105,16 +105,16 @@ services:
STORAGE_BUCKET: default STORAGE_BUCKET: default
STORAGE_ACCESS_KEY: minioadmin STORAGE_ACCESS_KEY: minioadmin
STORAGE_SECRET_KEY: minioadmin STORAGE_SECRET_KEY: minioadmin
STORAGE_USE_SSL: false STORAGE_USE_SSL: "false"
STORAGE_SKIP_BUCKET_CHECK: false STORAGE_SKIP_BUCKET_CHECK: "false"
# -- Crowdin (Optional) -- # -- Crowdin (Optional) --
# CROWDIN_PROJECT_ID: # CROWDIN_PROJECT_ID:
# CROWDIN_PERSONAL_TOKEN: # CROWDIN_PERSONAL_TOKEN:
# -- Feature Flags (Optional) -- # -- Feature Flags (Optional) --
# DISABLE_SIGNUPS: false # DISABLE_SIGNUPS: "false"
# DISABLE_EMAIL_AUTH: false # DISABLE_EMAIL_AUTH: "false"
# -- GitHub (Optional) -- # -- GitHub (Optional) --
# GITHUB_CLIENT_ID: github_client_id # GITHUB_CLIENT_ID: github_client_id
+6 -6
View File
@@ -47,8 +47,8 @@ services:
TIMEOUT: 10000 TIMEOUT: 10000
CONCURRENT: 10 CONCURRENT: 10
TOKEN: chrome_token TOKEN: chrome_token
EXIT_ON_HEALTH_FAILURE: true EXIT_ON_HEALTH_FAILURE: "true"
PRE_REQUEST_HEALTH_CHECK: true PRE_REQUEST_HEALTH_CHECK: "true"
labels: labels:
- traefik.enable=true - traefik.enable=true
- traefik.http.routers.printer.rule=Host(`printer.example.com`) - traefik.http.routers.printer.rule=Host(`printer.example.com`)
@@ -94,16 +94,16 @@ services:
STORAGE_BUCKET: default STORAGE_BUCKET: default
STORAGE_ACCESS_KEY: minioadmin STORAGE_ACCESS_KEY: minioadmin
STORAGE_SECRET_KEY: minioadmin STORAGE_SECRET_KEY: minioadmin
STORAGE_USE_SSL: false STORAGE_USE_SSL: "false"
STORAGE_SKIP_BUCKET_CHECK: false STORAGE_SKIP_BUCKET_CHECK: "false"
# -- Crowdin (Optional) -- # -- Crowdin (Optional) --
# CROWDIN_PROJECT_ID: # CROWDIN_PROJECT_ID:
# CROWDIN_PERSONAL_TOKEN: # CROWDIN_PERSONAL_TOKEN:
# -- Feature Flags (Optional) -- # -- Feature Flags (Optional) --
# DISABLE_SIGNUPS: false # DISABLE_SIGNUPS: "false"
# DISABLE_EMAIL_AUTH: false # DISABLE_EMAIL_AUTH: "false"
# -- GitHub (Optional) -- # -- GitHub (Optional) --
# GITHUB_CLIENT_ID: github_client_id # GITHUB_CLIENT_ID: github_client_id
+6 -6
View File
@@ -45,8 +45,8 @@ services:
TIMEOUT: 10000 TIMEOUT: 10000
CONCURRENT: 10 CONCURRENT: 10
TOKEN: chrome_token TOKEN: chrome_token
EXIT_ON_HEALTH_FAILURE: true EXIT_ON_HEALTH_FAILURE: "true"
PRE_REQUEST_HEALTH_CHECK: true PRE_REQUEST_HEALTH_CHECK: "true"
labels: labels:
- traefik.enable=true - traefik.enable=true
- traefik.http.routers.printer.rule=Host(`printer.example.com`) - traefik.http.routers.printer.rule=Host(`printer.example.com`)
@@ -90,16 +90,16 @@ services:
STORAGE_BUCKET: default STORAGE_BUCKET: default
STORAGE_ACCESS_KEY: minioadmin STORAGE_ACCESS_KEY: minioadmin
STORAGE_SECRET_KEY: minioadmin STORAGE_SECRET_KEY: minioadmin
STORAGE_USE_SSL: false STORAGE_USE_SSL: "false"
STORAGE_SKIP_BUCKET_CHECK: false STORAGE_SKIP_BUCKET_CHECK: "false"
# -- Crowdin (Optional) -- # -- Crowdin (Optional) --
# CROWDIN_PROJECT_ID: # CROWDIN_PROJECT_ID:
# CROWDIN_PERSONAL_TOKEN: # CROWDIN_PERSONAL_TOKEN:
# -- Feature Flags (Optional) -- # -- Feature Flags (Optional) --
# DISABLE_SIGNUPS: false # DISABLE_SIGNUPS: "false"
# DISABLE_EMAIL_AUTH: false # DISABLE_EMAIL_AUTH: "false"
# -- GitHub (Optional) -- # -- GitHub (Optional) --
# GITHUB_CLIENT_ID: github_client_id # GITHUB_CLIENT_ID: github_client_id