Added PageHeader and first content
Some checks failed
Build and Deploy Astro Site / deploy (push) Failing after 42s
Some checks failed
Build and Deploy Astro Site / deploy (push) Failing after 42s
This commit is contained in:
14
.idea/codeStyles/Project.xml
generated
Normal file
14
.idea/codeStyles/Project.xml
generated
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<code_scheme name="Project" version="173">
|
||||||
|
<editorconfig>
|
||||||
|
<option name="ENABLED" value="false" />
|
||||||
|
</editorconfig>
|
||||||
|
<codeStyleSettings language="CSS">
|
||||||
|
<indentOptions>
|
||||||
|
<option name="INDENT_SIZE" value="2" />
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||||
|
<option name="TAB_SIZE" value="2" />
|
||||||
|
</indentOptions>
|
||||||
|
</codeStyleSettings>
|
||||||
|
</code_scheme>
|
||||||
|
</component>
|
||||||
2
.idea/codeStyles/codeStyleConfig.xml
generated
2
.idea/codeStyles/codeStyleConfig.xml
generated
@@ -1,5 +1,5 @@
|
|||||||
<component name="ProjectCodeStyleConfiguration">
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
<state>
|
<state>
|
||||||
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
|
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||||
</state>
|
</state>
|
||||||
</component>
|
</component>
|
||||||
121
.idea/workspace.xml
generated
121
.idea/workspace.xml
generated
@@ -4,8 +4,51 @@
|
|||||||
<option name="autoReloadType" value="SELECTIVE" />
|
<option name="autoReloadType" value="SELECTIVE" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="c41707ed-a751-4a5e-bfaa-7bebd8a58741" name="Changes" comment="Fixed wrong folder name in admin">
|
<list default="true" id="c41707ed-a751-4a5e-bfaa-7bebd8a58741" name="Changes" comment="Fixed : Arbitary css purging">
|
||||||
<change beforePath="$PROJECT_DIR$/postcss.config.js" beforeDir="false" afterPath="$PROJECT_DIR$/postcss.config.js" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/src/app/(site)/awq/[...slug]/page.tsx" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/app/(site)/awq/page.tsx" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/components/Markdoc/Highlight/Highlight.module.css" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/components/Markdoc/Highlight/index.tsx" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/components/Page/Header/PageHeader.module.css" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/components/Page/Header/index.tsx" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/layouts/AWQLayout/index.tsx" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/layouts/ArticleLayout/index.tsx" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/lib/content/awq/collector.ts" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/lib/content/awq/talents.ts" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/lib/keystatic/collections/awq/article.ts" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/lib/keystatic/collections/awq/talents.ts" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/lib/keystatic/components/Inline.ts" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/lib/utils/date.ts" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/styles/themes/awq.css" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/styles/tools.css" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/styles/tools/tables.css" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/types/keystatic.ts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/codeStyles/codeStyleConfig.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/codeStyles/codeStyleConfig.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/keystatic.config.ts" beforeDir="false" afterPath="$PROJECT_DIR$/keystatic.config.ts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/public/images/authors/dave-damage/avatar.png" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/public/images/authors/dave-damage/awq_cover-default.png" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/public/images/content/the-metatron/the-kitchensink/pexels-jplenio-1102912.jpg" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/public/images/covers/the-metatron/the-kitchensink/cover.jpeg" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/app/(admin)/keystatic/keystatic.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/app/(admin)/keystatic/keystatic.ts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/app/(site)/globals.css" beforeDir="false" afterPath="$PROJECT_DIR$/src/app/(site)/globals.css" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/app/(site)/layout.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/app/(site)/layout.tsx" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/components/Markdoc/Renderer/Renderer.module.css" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/Markdoc/Renderer/Renderer.module.css" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/components/Markdoc/Renderer/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/Markdoc/Renderer/index.tsx" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/content/taxonomy/authors/dave-damage.json" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/content/taxonomy/authors/dave-damage/test.mdoc" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/content/taxonomy/tags/rant-against-the-machine.json" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/content/taxonomy/tags/was-ist-was.json" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/content/the-metatron/the-kitchensink.mdoc" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/lib/content/taxonomy/authors.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/lib/content/taxonomy/authors.ts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/lib/content/taxonomy/tags.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/lib/content/taxonomy/tags.ts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/lib/keystatic/collections/taxonomy/authors.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/lib/keystatic/collections/taxonomy/authors.ts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/lib/keystatic/fields/article.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/lib/keystatic/fields/article.ts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/lib/keystatic/fields/content.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/lib/keystatic/fields/content.ts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/lib/keystatic/fields/publishing.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/lib/keystatic/fields/publishing.ts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/lib/markdoc/tags.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/lib/markdoc/tags.ts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/styles/settings/colors.css" beforeDir="false" afterPath="$PROJECT_DIR$/src/styles/settings/colors.css" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/styles/settings/elements.css" beforeDir="false" afterPath="$PROJECT_DIR$/src/styles/settings/elements.css" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
@@ -26,37 +69,37 @@
|
|||||||
<option name="hideEmptyMiddlePackages" value="true" />
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
<option name="showLibraryContents" value="true" />
|
<option name="showLibraryContents" value="true" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PropertiesComponent">{
|
<component name="PropertiesComponent"><![CDATA[{
|
||||||
"keyToString": {
|
"keyToString": {
|
||||||
"ModuleVcsDetector.initialDetectionPerformed": "true",
|
"ModuleVcsDetector.initialDetectionPerformed": "true",
|
||||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||||
"RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
|
"RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
|
||||||
"RunOnceActivity.git.unshallow": "true",
|
"RunOnceActivity.git.unshallow": "true",
|
||||||
"git-widget-placeholder": "main",
|
"git-widget-placeholder": "main",
|
||||||
"js.debugger.nextJs.config.created.client": "true",
|
"js.debugger.nextJs.config.created.client": "true",
|
||||||
"js.debugger.nextJs.config.created.server": "true",
|
"js.debugger.nextJs.config.created.server": "true",
|
||||||
"node.js.detected.package.eslint": "true",
|
"node.js.detected.package.eslint": "true",
|
||||||
"node.js.detected.package.standard": "true",
|
"node.js.detected.package.standard": "true",
|
||||||
"node.js.detected.package.stylelint": "true",
|
"node.js.detected.package.stylelint": "true",
|
||||||
"node.js.detected.package.tslint": "true",
|
"node.js.detected.package.tslint": "true",
|
||||||
"node.js.selected.package.eslint": "(autodetect)",
|
"node.js.selected.package.eslint": "(autodetect)",
|
||||||
"node.js.selected.package.standard": "",
|
"node.js.selected.package.standard": "",
|
||||||
"node.js.selected.package.stylelint": "/Users/dave/projects/dave-dmg/blog/node_modules/stylelint",
|
"node.js.selected.package.stylelint": "/Users/dave/projects/dave-dmg/blog/node_modules/stylelint",
|
||||||
"node.js.selected.package.tslint": "(autodetect)",
|
"node.js.selected.package.tslint": "(autodetect)",
|
||||||
"nodejs_package_manager_path": "npm",
|
"nodejs_package_manager_path": "npm",
|
||||||
"prettierjs.PrettierConfiguration.Package": "/Users/dave/projects/dave-dmg/blog/node_modules/prettier",
|
"prettierjs.PrettierConfiguration.Package": "/Users/dave/projects/dave-dmg/blog/node_modules/prettier",
|
||||||
"settings.editor.selected.configurable": "settings.javascript.linters.eslint",
|
"settings.editor.selected.configurable": "settings.javascript.prettier",
|
||||||
"ts.external.directory.path": "/Users/dave/projects/dave-dmg/blog/node_modules/typescript/lib",
|
"ts.external.directory.path": "/Users/dave/projects/dave-dmg/blog/node_modules/typescript/lib",
|
||||||
"vue.rearranger.settings.migration": "true"
|
"vue.rearranger.settings.migration": "true"
|
||||||
}
|
}
|
||||||
}</component>
|
}]]></component>
|
||||||
<component name="RecentsManager">
|
<component name="RecentsManager">
|
||||||
<key name="MoveFile.RECENT_KEYS">
|
<key name="MoveFile.RECENT_KEYS">
|
||||||
<recent name="$PROJECT_DIR$/src/app/(site)" />
|
<recent name="$PROJECT_DIR$/src/layouts/ArticleLayout" />
|
||||||
<recent name="$PROJECT_DIR$/src/app" />
|
<recent name="$PROJECT_DIR$/types" />
|
||||||
<recent name="$PROJECT_DIR$/src/app/(admin)" />
|
|
||||||
<recent name="$PROJECT_DIR$/src/components/Markdoc" />
|
|
||||||
<recent name="$PROJECT_DIR$/src/components" />
|
<recent name="$PROJECT_DIR$/src/components" />
|
||||||
|
<recent name="$PROJECT_DIR$/src/components/Layout/Page" />
|
||||||
|
<recent name="$PROJECT_DIR$/src/app/(site)" />
|
||||||
</key>
|
</key>
|
||||||
</component>
|
</component>
|
||||||
<component name="RunManager" selected="npm.Next.js: server-side">
|
<component name="RunManager" selected="npm.Next.js: server-side">
|
||||||
@@ -90,6 +133,7 @@
|
|||||||
<updated>1756802819394</updated>
|
<updated>1756802819394</updated>
|
||||||
<workItem from="1756802820524" duration="57336000" />
|
<workItem from="1756802820524" duration="57336000" />
|
||||||
<workItem from="1756985956072" duration="111716000" />
|
<workItem from="1756985956072" duration="111716000" />
|
||||||
|
<workItem from="1757501953150" duration="58034000" />
|
||||||
</task>
|
</task>
|
||||||
<task id="LOCAL-00001" summary="Added simple astrojs deploy">
|
<task id="LOCAL-00001" summary="Added simple astrojs deploy">
|
||||||
<option name="closed" value="true" />
|
<option name="closed" value="true" />
|
||||||
@@ -235,7 +279,15 @@
|
|||||||
<option name="project" value="LOCAL" />
|
<option name="project" value="LOCAL" />
|
||||||
<updated>1757489910389</updated>
|
<updated>1757489910389</updated>
|
||||||
</task>
|
</task>
|
||||||
<option name="localTasksCounter" value="19" />
|
<task id="LOCAL-00019" summary="Fixed : Arbitary css purging">
|
||||||
|
<option name="closed" value="true" />
|
||||||
|
<created>1757490230515</created>
|
||||||
|
<option name="number" value="00019" />
|
||||||
|
<option name="presentableId" value="LOCAL-00019" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1757490230515</updated>
|
||||||
|
</task>
|
||||||
|
<option name="localTasksCounter" value="20" />
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="TypeScriptGeneratedFilesManager">
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
@@ -274,7 +326,8 @@
|
|||||||
<MESSAGE value="Fixed overeager purgecss" />
|
<MESSAGE value="Fixed overeager purgecss" />
|
||||||
<MESSAGE value="Remove variable purging from purgecss" />
|
<MESSAGE value="Remove variable purging from purgecss" />
|
||||||
<MESSAGE value="Fixed wrong folder name in admin" />
|
<MESSAGE value="Fixed wrong folder name in admin" />
|
||||||
<option name="LAST_COMMIT_MESSAGE" value="Fixed wrong folder name in admin" />
|
<MESSAGE value="Fixed : Arbitary css purging" />
|
||||||
|
<option name="LAST_COMMIT_MESSAGE" value="Fixed : Arbitary css purging" />
|
||||||
</component>
|
</component>
|
||||||
<component name="XDebuggerManager">
|
<component name="XDebuggerManager">
|
||||||
<breakpoint-manager>
|
<breakpoint-manager>
|
||||||
@@ -284,12 +337,6 @@
|
|||||||
<line>11</line>
|
<line>11</line>
|
||||||
<option name="timeStamp" value="1" />
|
<option name="timeStamp" value="1" />
|
||||||
</line-breakpoint>
|
</line-breakpoint>
|
||||||
<line-breakpoint enabled="true" type="javascript">
|
|
||||||
<url>file://$PROJECT_DIR$/src/app/(site)/layout.tsx</url>
|
|
||||||
<line>22</line>
|
|
||||||
<properties lambdaOrdinal="-1" />
|
|
||||||
<option name="timeStamp" value="2" />
|
|
||||||
</line-breakpoint>
|
|
||||||
</breakpoints>
|
</breakpoints>
|
||||||
</breakpoint-manager>
|
</breakpoint-manager>
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import { config } from '@keystatic/core'
|
import { config } from '@keystatic/core'
|
||||||
|
|
||||||
|
import { AWQPostsCollection } from '@/lib/keystatic/collections/awq/article'
|
||||||
|
import { AWQTalentsCollection } from '@/lib/keystatic/collections/awq/talents'
|
||||||
import { MetaPostsCollection } from '@/lib/keystatic/collections/meta/article'
|
import { MetaPostsCollection } from '@/lib/keystatic/collections/meta/article'
|
||||||
import { AuthorsCollection } from '@/lib/keystatic/collections/taxonomy/authors'
|
import { AuthorsCollection } from '@/lib/keystatic/collections/taxonomy/authors'
|
||||||
import { TagsCollection } from '@/lib/keystatic/collections/taxonomy/tags'
|
import { TagsCollection } from '@/lib/keystatic/collections/taxonomy/tags'
|
||||||
@@ -15,5 +17,7 @@ export default config({
|
|||||||
tags: TagsCollection,
|
tags: TagsCollection,
|
||||||
authors: AuthorsCollection,
|
authors: AuthorsCollection,
|
||||||
meta_posts: MetaPostsCollection,
|
meta_posts: MetaPostsCollection,
|
||||||
|
awq_posts: AWQPostsCollection,
|
||||||
|
awq_talents: AWQTalentsCollection,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.3 MiB After Width: | Height: | Size: 66 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 1.9 MiB |
Binary file not shown.
|
Before Width: | Height: | Size: 87 KiB |
@@ -1,6 +1,6 @@
|
|||||||
'use client'
|
'use client'
|
||||||
|
|
||||||
import { makePage } from '@keystatic/next/ui/app'
|
import { makePage } from '@keystatic/next/ui/app'
|
||||||
import config from '../../../../keystatic.config'
|
import config from '~/keystatic.config'
|
||||||
|
|
||||||
export default makePage(config)
|
export default makePage(config)
|
||||||
|
|||||||
32
src/app/(site)/awq/[...slug]/page.tsx
Normal file
32
src/app/(site)/awq/[...slug]/page.tsx
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import MarkdocRenderer from '@/components/Markdoc/Renderer'
|
||||||
|
import { AWQLayout } from '@/layouts/AWQLayout'
|
||||||
|
import {
|
||||||
|
collectAWQContent,
|
||||||
|
getContentByPath,
|
||||||
|
} from '@/lib/content/awq/collector'
|
||||||
|
import { notFound } from 'next/navigation'
|
||||||
|
|
||||||
|
export async function generateStaticParams() {
|
||||||
|
const allContent = await collectAWQContent()
|
||||||
|
|
||||||
|
return allContent.map((item) => ({
|
||||||
|
slug: item.fullPath.split('/'),
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
export default async function Page({ params }: { params: { slug: string[] } }) {
|
||||||
|
const { slug } = await params
|
||||||
|
const breadcrumbs = ['awq', ...slug]
|
||||||
|
const path = slug.join('/')
|
||||||
|
const article = await getContentByPath(path)
|
||||||
|
|
||||||
|
if (!article) {
|
||||||
|
notFound()
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<AWQLayout article={article} breadcrumbs={breadcrumbs}>
|
||||||
|
<MarkdocRenderer content={article.content} className="awq-content" />
|
||||||
|
</AWQLayout>
|
||||||
|
)
|
||||||
|
}
|
||||||
19
src/app/(site)/awq/page.tsx
Normal file
19
src/app/(site)/awq/page.tsx
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import MarkdocRenderer from '@/components/Markdoc/Renderer'
|
||||||
|
import { AWQLayout } from '@/layouts/AWQLayout'
|
||||||
|
import { getContentByPath } from '@/lib/content/awq/collector'
|
||||||
|
import { notFound } from 'next/navigation'
|
||||||
|
|
||||||
|
export default async function Page({ params }: { params: { slug: string[] } }) {
|
||||||
|
const article = await getContentByPath('')
|
||||||
|
const breadcrumbs = ['awq']
|
||||||
|
|
||||||
|
if (!article) {
|
||||||
|
notFound()
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<AWQLayout article={article} breadcrumbs={breadcrumbs}>
|
||||||
|
<MarkdocRenderer content={article.content} className="meta-content" />
|
||||||
|
</AWQLayout>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
@import url('../../styles/settings.css');
|
@import url('../../styles/settings.css');
|
||||||
|
@import url('../../styles/tools.css');
|
||||||
|
|
||||||
html {
|
html {
|
||||||
font-size: var(--typo-size-base);
|
font-size: var(--typo-size-base);
|
||||||
|
|||||||
@@ -1,6 +1,13 @@
|
|||||||
import '@fontsource/iosevka'
|
import '@fontsource/iosevka-aile/300.css'
|
||||||
import '@fontsource/iosevka-aile'
|
import '@fontsource/iosevka-aile/400.css'
|
||||||
|
import '@fontsource/iosevka-aile/600.css'
|
||||||
|
import '@fontsource/iosevka-aile/700.css'
|
||||||
|
import '@fontsource/iosevka/300.css'
|
||||||
|
import '@fontsource/iosevka/400.css'
|
||||||
|
import '@fontsource/iosevka/600.css'
|
||||||
|
import '@fontsource/iosevka/700.css'
|
||||||
import type { Metadata } from 'next'
|
import type { Metadata } from 'next'
|
||||||
|
|
||||||
import { Blaka, Geist } from 'next/font/google'
|
import { Blaka, Geist } from 'next/font/google'
|
||||||
import './foundation.css'
|
import './foundation.css'
|
||||||
import './globals.css'
|
import './globals.css'
|
||||||
|
|||||||
21
src/components/Markdoc/Highlight/Highlight.module.css
Normal file
21
src/components/Markdoc/Highlight/Highlight.module.css
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
.marker {
|
||||||
|
padding: var(--spacing-snug);
|
||||||
|
}
|
||||||
|
|
||||||
|
.primary {
|
||||||
|
color: var(--color-text-inverse);
|
||||||
|
background-color: var(--color-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.secondary {
|
||||||
|
color: var(--color-text-inverse);
|
||||||
|
background-color: var(--color-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.tertiary {
|
||||||
|
background-color: var(--color-tertiary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.quarternary {
|
||||||
|
background-color: var(--color-quarternary);
|
||||||
|
}
|
||||||
13
src/components/Markdoc/Highlight/index.tsx
Normal file
13
src/components/Markdoc/Highlight/index.tsx
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import { ReactNode } from 'react'
|
||||||
|
|
||||||
|
import styles from './Highlight.module.css'
|
||||||
|
|
||||||
|
interface HighlightProps {
|
||||||
|
children?: ReactNode
|
||||||
|
color?: 'primary' | 'secondary' | 'tertiary' | 'quarternary'
|
||||||
|
}
|
||||||
|
|
||||||
|
export const Highlight: React.FC<HighlightProps> = ({
|
||||||
|
color = 'secondary',
|
||||||
|
children,
|
||||||
|
}) => <mark className={`${styles.marker} ${styles[color]}`}>{children}</mark>
|
||||||
@@ -87,7 +87,6 @@
|
|||||||
font-size: var(--el-h4-font-size);
|
font-size: var(--el-h4-font-size);
|
||||||
font-weight: var(--el-h4-font-weight);
|
font-weight: var(--el-h4-font-weight);
|
||||||
line-height: var(--el-h4-line-height);
|
line-height: var(--el-h4-line-height);
|
||||||
text-align: center;
|
|
||||||
text-transform: var(--el-h4-text-transform);
|
text-transform: var(--el-h4-text-transform);
|
||||||
letter-spacing: var(--el-h4-letter-spacing);
|
letter-spacing: var(--el-h4-letter-spacing);
|
||||||
}
|
}
|
||||||
@@ -101,23 +100,22 @@
|
|||||||
font-weight: var(--el-h5-font-weight);
|
font-weight: var(--el-h5-font-weight);
|
||||||
line-height: var(--el-h5-line-height);
|
line-height: var(--el-h5-line-height);
|
||||||
color: var(--el-h5-color);
|
color: var(--el-h5-color);
|
||||||
text-align: center;
|
|
||||||
text-transform: var(--el-h5-text-transform);
|
text-transform: var(--el-h5-text-transform);
|
||||||
letter-spacing: var(--el-h5-letter-spacing);
|
letter-spacing: var(--el-h5-letter-spacing);
|
||||||
|
|
||||||
&::before,
|
&::before,
|
||||||
&::after {
|
&::after {
|
||||||
content: "";
|
content: "";
|
||||||
padding: 0 var(--spacing-tight);
|
padding-right: var(--spacing-tight);
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
content: "▼";
|
content: "❭";
|
||||||
}
|
}
|
||||||
|
|
||||||
&::after {
|
&::after {
|
||||||
content: "▼";
|
content: "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,7 +127,6 @@
|
|||||||
font-weight: var(--el-h6-font-weight);
|
font-weight: var(--el-h6-font-weight);
|
||||||
line-height: var(--el-h6-line-height);
|
line-height: var(--el-h6-line-height);
|
||||||
color: var(--el-h6-color);
|
color: var(--el-h6-color);
|
||||||
text-align: center;
|
|
||||||
text-transform: var(--el-h6-text-transform);
|
text-transform: var(--el-h6-text-transform);
|
||||||
letter-spacing: var(--el-h6-letter-spacing);
|
letter-spacing: var(--el-h6-letter-spacing);
|
||||||
}
|
}
|
||||||
@@ -338,7 +335,6 @@
|
|||||||
list-style-position: outside;
|
list-style-position: outside;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Override if you specifically need inside positioning */
|
|
||||||
.list-inside ol li,
|
.list-inside ol li,
|
||||||
.list-inside ul li {
|
.list-inside ul li {
|
||||||
list-style-position: inside;
|
list-style-position: inside;
|
||||||
@@ -421,23 +417,17 @@
|
|||||||
i {
|
i {
|
||||||
padding: 0.1em 0.2em;
|
padding: 0.1em 0.2em;
|
||||||
|
|
||||||
font-weight: var(--typo-weight-semibold);
|
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
color: var(--color-surface-base);
|
text-transform: uppercase;
|
||||||
letter-spacing: var(--typo-spacing-relaxed);
|
letter-spacing: var(--typo-spacing-relaxed);
|
||||||
|
|
||||||
background: var(--color-primary);
|
background: var(--color-surface-elevated-1);
|
||||||
|
|
||||||
& * {
|
|
||||||
color: var(--color-text-inverse) !important;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
strong,
|
strong,
|
||||||
b {
|
b {
|
||||||
font-weight: var(--typo-weight-black);
|
font-weight: var(--typo-weight-black);
|
||||||
text-transform: uppercase;
|
letter-spacing: var(--typo-spacing-relaxed);
|
||||||
letter-spacing: var(--typo-spacing-loose);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
@@ -508,13 +498,6 @@
|
|||||||
color: var(--color-text-secondary);
|
color: var(--color-text-secondary);
|
||||||
}
|
}
|
||||||
|
|
||||||
mark {
|
|
||||||
padding: 0.1em 0.2em;
|
|
||||||
font-weight: var(--typo-weight-semibold);
|
|
||||||
color: var(--color-surface-base);
|
|
||||||
background: var(--color-primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
small {
|
small {
|
||||||
font-size: var(--typo-size-xs);
|
font-size: var(--typo-size-xs);
|
||||||
color: var(--color-text-tertiary);
|
color: var(--color-text-tertiary);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import {
|
|||||||
DefinitionItem,
|
DefinitionItem,
|
||||||
DefinitionList,
|
DefinitionList,
|
||||||
} from '@/components/Markdoc/DefinitionList'
|
} from '@/components/Markdoc/DefinitionList'
|
||||||
|
import { Highlight } from '@/components/Markdoc/Highlight'
|
||||||
import { tags } from '@/lib/markdoc/tags'
|
import { tags } from '@/lib/markdoc/tags'
|
||||||
import type { Node } from '@markdoc/markdoc'
|
import type { Node } from '@markdoc/markdoc'
|
||||||
import Markdoc from '@markdoc/markdoc'
|
import Markdoc from '@markdoc/markdoc'
|
||||||
@@ -21,6 +22,7 @@ export default async function Renderer({
|
|||||||
const components = {
|
const components = {
|
||||||
DefinitionList,
|
DefinitionList,
|
||||||
DefinitionItem,
|
DefinitionItem,
|
||||||
|
Highlight,
|
||||||
}
|
}
|
||||||
const { node } = await content()
|
const { node } = await content()
|
||||||
const errors = Markdoc.validate(node, { tags })
|
const errors = Markdoc.validate(node, { tags })
|
||||||
|
|||||||
159
src/components/Page/Header/PageHeader.module.css
Normal file
159
src/components/Page/Header/PageHeader.module.css
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
.container {
|
||||||
|
margin-bottom: var(--spacing-comfortable);
|
||||||
|
border-bottom: var(--size-4) solid var(--color-text-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
max-width: clamp(60ch, 90vw, 90ch);
|
||||||
|
margin: 0 auto;
|
||||||
|
font-size: var(--font-size-responsive);
|
||||||
|
|
||||||
|
&:not(:has(+ .cover)) {
|
||||||
|
border-bottom: var(--size-3) solid var(--color-text-primary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.overline {
|
||||||
|
padding: 0 var(--spacing-comfortable);
|
||||||
|
background-color: var(--color-surface-inverse)
|
||||||
|
}
|
||||||
|
|
||||||
|
.bcwrapper {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
max-width: clamp(60ch, 90vw, 90ch);
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: var(--spacing-snug) 0;
|
||||||
|
|
||||||
|
font-size: var(--font-size-responsive);
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumbs {
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
font-family: var(--font-mono), monospace;
|
||||||
|
font-size: var(--typo-size-xs);
|
||||||
|
color: var(--color-text-inverse);
|
||||||
|
letter-spacing: var(--typo-spacing-relaxed);
|
||||||
|
}
|
||||||
|
|
||||||
|
.publishdate {
|
||||||
|
font-family: var(--font-mono), monospace;
|
||||||
|
font-size: var(--typo-size-xs);
|
||||||
|
font-weight: var(--typo-weight-bold);
|
||||||
|
color: var(--color-text-inverse);
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
margin-block: var(--spacing-cozy) var(--spacing-cozy);
|
||||||
|
padding-bottom: var(--spacing-snug);
|
||||||
|
|
||||||
|
font-family: var(--el-h1-font-family), serif;
|
||||||
|
font-size: var(--el-h1-font-size);
|
||||||
|
font-weight: var(--el-h1-font-weight);
|
||||||
|
line-height: var(--el-h1-line-height);
|
||||||
|
text-transform: var(--el-h1-text-transform);
|
||||||
|
letter-spacing: var(--el-h1-letter-spacing);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cover {
|
||||||
|
border-top: var(--size-3) solid var(--color-text-primary);
|
||||||
|
border-bottom: var(--size-3) solid var(--color-text-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.image {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
max-height: 60vh;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.caption {
|
||||||
|
padding: var(--spacing-snug) 0;
|
||||||
|
font-family: var(--font-mono), monospace;
|
||||||
|
color: var(--color-text-inverse);
|
||||||
|
background: var(--color-surface-inverse);
|
||||||
|
}
|
||||||
|
|
||||||
|
.captionwrapper {
|
||||||
|
max-width: clamp(60ch, 90vw, 90ch);
|
||||||
|
margin: 0 auto;
|
||||||
|
font-size: var(--font-size-responsive);
|
||||||
|
}
|
||||||
|
|
||||||
|
.captiontext {
|
||||||
|
font-size: var(--typo-size-xs);
|
||||||
|
}
|
||||||
|
|
||||||
|
.metadata {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||||
|
gap: var(--spacing-comfortable);
|
||||||
|
|
||||||
|
max-width: clamp(60ch, 90vw, 90ch);
|
||||||
|
margin: 0 auto;
|
||||||
|
|
||||||
|
font-size: var(--font-size-responsive);
|
||||||
|
}
|
||||||
|
|
||||||
|
.metasection {
|
||||||
|
padding: var(--spacing-snug) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.metalabel {
|
||||||
|
display: block;
|
||||||
|
|
||||||
|
margin-bottom: var(--spacing-snug);
|
||||||
|
padding-bottom: var(--spacing-snug);
|
||||||
|
border-bottom: var(--size-1) solid var(--color-text-primary);
|
||||||
|
|
||||||
|
font-family: var(--font-mono), monospace;
|
||||||
|
font-size: var(--typo-size-xs);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: var(--typo-spacing-relaxed);
|
||||||
|
}
|
||||||
|
|
||||||
|
.author {
|
||||||
|
font-size: var(--typo-size-sm);
|
||||||
|
font-weight: var(--typo-weight-bold);
|
||||||
|
color: var(--color-text-secondary);
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.taglist {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--spacing-tight);
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag {
|
||||||
|
padding: var(--spacing-tight) var(--spacing-snug);
|
||||||
|
border: var(--size-1) solid var(--color-palette-charcoal-gray);
|
||||||
|
|
||||||
|
font-family: var(--font-mono), monospace;
|
||||||
|
font-size: var(--typo-size-sm);
|
||||||
|
font-weight: var(--typo-weight-bold);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: var(--typo-spacing-relaxed);
|
||||||
|
|
||||||
|
background: var(--color-palette-charcoal-gray);
|
||||||
|
|
||||||
|
& .link {
|
||||||
|
color: var(--color-palette-off-white);
|
||||||
|
transition: color 0.5s ease-in-out;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: var(--color-primary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.updatedate {
|
||||||
|
font-size: var(--typo-size-sm);
|
||||||
|
font-weight: var(--typo-weight-bold);
|
||||||
|
color: var(--color-text-secondary);
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
103
src/components/Page/Header/index.tsx
Normal file
103
src/components/Page/Header/index.tsx
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
import { toMilitaryDTG } from '@/lib/utils/date'
|
||||||
|
import Image from 'next/image'
|
||||||
|
import Link from 'next/link'
|
||||||
|
import { ArticleContent } from '~/types/keystatic'
|
||||||
|
import styles from './PageHeader.module.css'
|
||||||
|
|
||||||
|
interface PageHeaderProps {
|
||||||
|
article: ArticleContent
|
||||||
|
breadcrumbs: string[]
|
||||||
|
author?: Author | null
|
||||||
|
tags?: Tag[]
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Author {
|
||||||
|
slug: string
|
||||||
|
name: string
|
||||||
|
avatar: string | null
|
||||||
|
description: string
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Tag {
|
||||||
|
slug: string
|
||||||
|
name: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export const PageHeader: React.FC<PageHeaderProps> = ({
|
||||||
|
article,
|
||||||
|
breadcrumbs,
|
||||||
|
author,
|
||||||
|
tags,
|
||||||
|
}) => {
|
||||||
|
const { title, publishing, cover } = article
|
||||||
|
return (
|
||||||
|
<header className={styles.container}>
|
||||||
|
<div className={styles.overline}>
|
||||||
|
<div className={styles.bcwrapper}>
|
||||||
|
<ul className={styles.breadcrumbs}>
|
||||||
|
{breadcrumbs.map((item) => (
|
||||||
|
<li key={item}>/{item}</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
<time className={styles.publishdate}>
|
||||||
|
{toMilitaryDTG(publishing.publishDate)}
|
||||||
|
</time>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className={styles.wrapper}>
|
||||||
|
<h1 className={styles.title}>{title}</h1>
|
||||||
|
</div>
|
||||||
|
{cover && cover.showInHeader && !!cover.src && (
|
||||||
|
<figure className={styles.cover}>
|
||||||
|
<Image
|
||||||
|
src={cover.src}
|
||||||
|
alt={cover.alt || 'Standard ALT'}
|
||||||
|
width={0}
|
||||||
|
height={0}
|
||||||
|
sizes="100vw"
|
||||||
|
className={styles.image}
|
||||||
|
/>
|
||||||
|
<figcaption className={styles.caption}>
|
||||||
|
<div className={styles.captionwrapper}>
|
||||||
|
{cover.caption ? (
|
||||||
|
<span className={styles.captiontext}>{cover.caption}</span>
|
||||||
|
) : (
|
||||||
|
<span className={styles.covermeta}>{cover.src}</span>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
)}
|
||||||
|
<div className={styles.metadata}>
|
||||||
|
{author && (
|
||||||
|
<div className={styles.metasection}>
|
||||||
|
<span className={styles.metalabel}>Author</span>
|
||||||
|
<span className={styles.author}>{author.name}</span>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
{tags && tags.length > 0 && (
|
||||||
|
<div className={styles.metasection}>
|
||||||
|
<span className={styles.metalabel}>Tags</span>
|
||||||
|
<ul className={styles.taglist}>
|
||||||
|
{tags.map((tag) => (
|
||||||
|
<li key={tag.slug} className={styles.tag}>
|
||||||
|
<Link className={styles.link} href={`/tags/${tag.slug}`}>
|
||||||
|
{tag.name}
|
||||||
|
</Link>
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
{publishing.editDate && (
|
||||||
|
<div className={styles.metasection}>
|
||||||
|
<span className={styles.metalabel}>Last Update</span>
|
||||||
|
<time className={styles.updatedate}>
|
||||||
|
{toMilitaryDTG(publishing.editDate)}
|
||||||
|
</time>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
)
|
||||||
|
}
|
||||||
44
src/content/awq/articles/index.mdoc
Normal file
44
src/content/awq/articles/index.mdoc
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
title: Advanced Warhammer Quest – An Introduction
|
||||||
|
summary: Where we explore what's AWQ is about.
|
||||||
|
cover:
|
||||||
|
src: /images/covers/awq/index/cover/src.png
|
||||||
|
alt: A demon hovering over a tome in a ruined castle
|
||||||
|
caption: |-
|
||||||
|
Strakzul the Spiderdog guarding the Liber Macellarus in the ruins of Burg
|
||||||
|
Bruchzahn; awaiting more meat for their grinder, as they care not from
|
||||||
|
whence the gore flows as long as it's not their own.
|
||||||
|
showInHeader: true
|
||||||
|
publishing:
|
||||||
|
publishDate: 2025-09-11T22:44:00.000Z
|
||||||
|
editDate: 2025-09-11T22:44:00.000Z
|
||||||
|
status: draft
|
||||||
|
featured: false
|
||||||
|
tags:
|
||||||
|
- awq
|
||||||
|
- what-and-how
|
||||||
|
author: dave-damage
|
||||||
|
seo:
|
||||||
|
metaTitle: AWQ – Introduction
|
||||||
|
metaDescription: Introduction to the homebrew board game »Advanced Warhammer Quest«
|
||||||
|
keywords: []
|
||||||
|
noIndex: false
|
||||||
|
---
|
||||||
|
In a nutshell »AWQ« (or »Advanced Warhammer Quest« is as my grandfather would say, a »bankert«. An ugly Frankensteinian monster, whose carcass is made up of games and ideas that came before, unsubtly stitched together by a crude hand prone to tremors.
|
||||||
|
|
||||||
|
It is a boardgame, a dungeon crawling one, where the gameplay loop is easy: Delve into a dungeon, kill some monsters, steal valuables, use that loot to become better and finance the next expedition. Or die trying…
|
||||||
|
|
||||||
|
## Influences
|
||||||
|
|
||||||
|
- Warhammer Fantasy Roleplaying Game
|
||||||
|
- Warhammer: The Old World Roleplaying Game
|
||||||
|
- Mordheim
|
||||||
|
- Advanced HeroQuest
|
||||||
|
- Advanced HeroQuest Reforged
|
||||||
|
- Warhammer Quest
|
||||||
|
- Torchbearer
|
||||||
|
- The Burning Wheel
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Note:** This is a work in progress, an unedited stream of conciousness, unsorted, raw and full of possible contradictions.
|
||||||
268
src/content/awq/articles/the-crunch.mdoc
Normal file
268
src/content/awq/articles/the-crunch.mdoc
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
---
|
||||||
|
title: Core Concepts
|
||||||
|
cover:
|
||||||
|
showInHeader: false
|
||||||
|
publishing:
|
||||||
|
publishDate: 2025-09-10T05:59:00.000Z
|
||||||
|
editDate: 2025-09-11T21:50:00.000Z
|
||||||
|
status: published
|
||||||
|
featured: false
|
||||||
|
tags:
|
||||||
|
- awq
|
||||||
|
- crunch
|
||||||
|
- what-and-how
|
||||||
|
author: dave-damage
|
||||||
|
seo:
|
||||||
|
metaTitle: Core Concepts
|
||||||
|
metaDescription: >-
|
||||||
|
The Core Rules of »AWQ« use several concepts and ideas multiple times
|
||||||
|
throughout the documents. Here we define them.
|
||||||
|
keywords: []
|
||||||
|
noIndex: false
|
||||||
|
---
|
||||||
|
The Core Rules of »AWQ« use several concepts and ideas multiple times throughout the documents. Instead of repeating them over and over, this document explains what they are, how they fit into the game and serves as a single source of truth.
|
||||||
|
|
||||||
|
## Quick Reference
|
||||||
|
|
||||||
|
- {% Highlighter color="primary" %}Model:{% /Highlighter %} Any figure on the board (**Characters, Adversaries, NPCs, etc.**)
|
||||||
|
- {% Highlighter color="primary" %}Check:{% /Highlighter %} `d6` against **Target Number** with different possible outcomes
|
||||||
|
- {% Highlighter color="primary" %}Momentum/Threat:{% /Highlighter %} Resources used by **Party/DM** respectively to influence the game
|
||||||
|
- {% Highlighter color="primary" %}Encounter:{% /Highlighter %} Isolated interaction with **Adversaries** or **Hazards**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Roles
|
||||||
|
|
||||||
|
Define the relation of someone or something to the game. Rules and effects usually specify the role affected.
|
||||||
|
|
||||||
|
### Players
|
||||||
|
|
||||||
|
Every *natural* person playing the game
|
||||||
|
|
||||||
|
#### Adventurers
|
||||||
|
|
||||||
|
- Players who undergo **Expeditions**
|
||||||
|
- Have access to **Momentum [✠]**
|
||||||
|
- Can assign optional roles:
|
||||||
|
- *Cartographer:* Responsible for keeping detailed record of the **Expedition**
|
||||||
|
- *Quartermaster:* Responsible for managing *Party Assets* and transactions
|
||||||
|
- *Archivist:* Responsible for keeping record of the *Party*
|
||||||
|
- *Shotcaller:* Responsible for rolling dice and drawing cards on the *Party's* behalf
|
||||||
|
- *Marshall:* Responsible for managing *Henchmen*
|
||||||
|
- *Torchbearer:* Responsible for tracking time and managing *Conditions*
|
||||||
|
|
||||||
|
#### Dungeon Master/Dungeon Mistress
|
||||||
|
|
||||||
|
- Usually abbreviated as **DM**
|
||||||
|
- Player controlling **Adversaries & Hazards**
|
||||||
|
- Has access to **Threat [✦]**
|
||||||
|
|
||||||
|
### Models
|
||||||
|
|
||||||
|
Entity on the **Game Board** controlled by a Player usually represented by a minitiature
|
||||||
|
|
||||||
|
#### Party
|
||||||
|
|
||||||
|
Models controlled by Adventurers
|
||||||
|
|
||||||
|
##### Characters
|
||||||
|
|
||||||
|
- Have access to most **Activities** in the game
|
||||||
|
- Can evolve throughout the game by spending **Advances**
|
||||||
|
- Limited to one per Adventurer
|
||||||
|
|
||||||
|
##### Followers
|
||||||
|
|
||||||
|
- Follow a single Character
|
||||||
|
- Use *Obedience* to track loyalty
|
||||||
|
|
||||||
|
##### Henchmen
|
||||||
|
|
||||||
|
- Specialised Hired Help
|
||||||
|
- Use *Morale* to track loyalty
|
||||||
|
|
||||||
|
#### Adversaries
|
||||||
|
|
||||||
|
- Models controlled by the DM
|
||||||
|
- Organised in different threat levels, that mostly reflect which **Activities** they can undertake
|
||||||
|
|
||||||
|
##### Minion [⁎]
|
||||||
|
|
||||||
|
Have access to basic **Activities**
|
||||||
|
|
||||||
|
##### Elite [⁑]
|
||||||
|
|
||||||
|
Have access to situational **Activities**
|
||||||
|
|
||||||
|
##### Champion [⁂]
|
||||||
|
|
||||||
|
- Have access to a wide array of **Activities**
|
||||||
|
- Can directly use **Threat**
|
||||||
|
- Can become a *Nemesis*
|
||||||
|
|
||||||
|
##### Nemesis [⋇]
|
||||||
|
|
||||||
|
Returning adversary which can evolve similar to **Characters**
|
||||||
|
|
||||||
|
#### Non-Player Characters
|
||||||
|
|
||||||
|
- Usually abbreviated as **NPC**
|
||||||
|
- Can be spawned by **Events, Hazards or Scenarios**
|
||||||
|
- Represent neutral parties, quest objectives, etc.
|
||||||
|
|
||||||
|
## Checks
|
||||||
|
|
||||||
|
- Always uses `d6`
|
||||||
|
- Determines *Outcome* of an activity
|
||||||
|
- Always rolled against a **Target Number (TN)**
|
||||||
|
- Consists of:
|
||||||
|
- **Check Type:** Determines the setup of the check
|
||||||
|
- *Basic Check*
|
||||||
|
- *Dramatic Check*
|
||||||
|
- *Extended Check*
|
||||||
|
- **Reference Value:** Denotes the **Skill** or **Characteristic** to be used for calculating **TN**
|
||||||
|
- **Difficulty:** Directly modifies the Reference Value based on difficulty
|
||||||
|
|
||||||
|
### Check Outcomes
|
||||||
|
|
||||||
|
- **Bane [⊗]:** Check fails with significant consequences
|
||||||
|
- **Failure [⊖]:** Check fails cleanly
|
||||||
|
- **Complication [⊜]:** Check succeeds but with a twist or minor setback
|
||||||
|
- **Success [⊕]:** Check succeeds as intended
|
||||||
|
- **Boon [⊛]:** Check succeeds with additional benefits
|
||||||
|
|
||||||
|
## Player Resources
|
||||||
|
|
||||||
|
Adventurers and DM use different set of resources to manipulate the game
|
||||||
|
|
||||||
|
### Character Resources
|
||||||
|
|
||||||
|
Tied to individual characters
|
||||||
|
|
||||||
|
#### Luck Points
|
||||||
|
|
||||||
|
Used to *re-roll* checks
|
||||||
|
|
||||||
|
#### Fate Points
|
||||||
|
|
||||||
|
Used to escape certain death and other grave conditions
|
||||||
|
|
||||||
|
### Party Resources
|
||||||
|
|
||||||
|
#### Momentum [✠]
|
||||||
|
|
||||||
|
- Used during **Encounters**
|
||||||
|
- Fuel for **Manoeuvres** and tactical options
|
||||||
|
- Fluctuates throughout combat
|
||||||
|
|
||||||
|
### DM Resources
|
||||||
|
|
||||||
|
#### Threat [✦]
|
||||||
|
|
||||||
|
- Used during **Expeditions** and **Encounters**
|
||||||
|
- Powers **Adversary** abilities and escalates **Encounters**
|
||||||
|
|
||||||
|
## Time Structure
|
||||||
|
|
||||||
|
AWQ organises time into nested scales, from largest to smallest
|
||||||
|
|
||||||
|
```plaintext
|
||||||
|
.
|
||||||
|
└── Season/
|
||||||
|
├── Downtime/
|
||||||
|
│ ├── Events
|
||||||
|
│ └── Endeavour
|
||||||
|
└── Expedition/
|
||||||
|
└── Encounter/
|
||||||
|
└── Round/
|
||||||
|
└── Turn/
|
||||||
|
└── Activity
|
||||||
|
```
|
||||||
|
|
||||||
|
### Time Scales
|
||||||
|
|
||||||
|
#### Season
|
||||||
|
|
||||||
|
- Consumed by **Endeavours** and **Expeditions**
|
||||||
|
- Represents weeks of activity
|
||||||
|
|
||||||
|
#### Event
|
||||||
|
|
||||||
|
Immediately resolved incident
|
||||||
|
|
||||||
|
#### Endeavour
|
||||||
|
|
||||||
|
Downtime Activity characters may undertake
|
||||||
|
|
||||||
|
#### Expedition
|
||||||
|
|
||||||
|
- Single delve into a **Dungeon**
|
||||||
|
- Contains one or more **Encounters**
|
||||||
|
|
||||||
|
#### Encounter
|
||||||
|
|
||||||
|
- Isolated interaction with **Adversaries** or **Hazards**
|
||||||
|
- Consists of one or more **Rounds**
|
||||||
|
|
||||||
|
#### Round
|
||||||
|
|
||||||
|
- Each **Model** acts once
|
||||||
|
- Consists of structured set of phases for resolution
|
||||||
|
|
||||||
|
#### Activity
|
||||||
|
|
||||||
|
- Single action taken by Model
|
||||||
|
- Interaction with location, **Hazard,** or other **Models**
|
||||||
|
|
||||||
|
##### Activity Types
|
||||||
|
|
||||||
|
- **Action [◇]:** Standard activities like *Movement*
|
||||||
|
- **Manoeuvres [⬡]:** Complex combat actions
|
||||||
|
- **Interruption [▽]:** Reactive activity that break normal turn order
|
||||||
|
|
||||||
|
## Location
|
||||||
|
|
||||||
|
Abstract types of localities that provide different gameplay opportunities and keywords
|
||||||
|
|
||||||
|
### Dungeon Structure
|
||||||
|
|
||||||
|
#### Dungeon
|
||||||
|
|
||||||
|
- Confined locality where **Expeditions** take place
|
||||||
|
- Can consist of multiple **Dungeon Levels**
|
||||||
|
|
||||||
|
#### Dungeon Level
|
||||||
|
|
||||||
|
- Single floor or area of a **Dungeon**
|
||||||
|
- Represented by the **Game Board**
|
||||||
|
- Danger increases with level
|
||||||
|
|
||||||
|
### Game Board
|
||||||
|
|
||||||
|
#### Board Section
|
||||||
|
|
||||||
|
- Physical tiles representing rooms, corridors, etc.
|
||||||
|
- Interconnected to form the **Game Board**
|
||||||
|
|
||||||
|
### Overland Locations
|
||||||
|
|
||||||
|
#### Region
|
||||||
|
|
||||||
|
Large area containing multiple location types
|
||||||
|
|
||||||
|
#### Settlement
|
||||||
|
|
||||||
|
Safe haven for **Adventurers** to trade and undertake **Endeavours**
|
||||||
|
|
||||||
|
#### Wilderness
|
||||||
|
|
||||||
|
- Dangerous areas connecting **Settlements** and **Dungeons**
|
||||||
|
- Contains its own **Encounters** and **Hazards**
|
||||||
|
|
||||||
|
## Hazards
|
||||||
|
|
||||||
|
Catch-all term for interactive environmental dangers and obstacles
|
||||||
|
|
||||||
|
## Keywords
|
||||||
|
- Used to signify synergies and antipodes
|
||||||
|
- Having multiple occurrences of the same keyword usually is beneficial for cost or outcome
|
||||||
213
src/content/awq/articles/the-styleguide.mdoc
Normal file
213
src/content/awq/articles/the-styleguide.mdoc
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
---
|
||||||
|
title: The Styleguide
|
||||||
|
summary: Where we define how to make things pretty
|
||||||
|
cover:
|
||||||
|
showInHeader: false
|
||||||
|
publishing:
|
||||||
|
publishDate: 2025-09-11T22:07:00.000Z
|
||||||
|
editDate: 2025-09-11T22:07:00.000Z
|
||||||
|
status: draft
|
||||||
|
featured: false
|
||||||
|
tags:
|
||||||
|
- awq
|
||||||
|
author: dave-damage
|
||||||
|
seo:
|
||||||
|
keywords: []
|
||||||
|
noIndex: false
|
||||||
|
---
|
||||||
|
Here we define the formatting and writing standards that will be used throughout the AWQ documents to ensure consistency
|
||||||
|
and clarity. We also use a set of unicode characters to define reoccurring gameplay elements.
|
||||||
|
|
||||||
|
## Text Formatting
|
||||||
|
|
||||||
|
These options should provide visual shortcuts to the nature of term in the rules.
|
||||||
|
|
||||||
|
{% DefinitionList %}
|
||||||
|
{% DefinitionItem term="Bold" %}
|
||||||
|
- {% Highlighter color="primary" %}Annotation:{% /Highlighter %} `(**bold**)`
|
||||||
|
- Major gameplay mechanics and important terms
|
||||||
|
- Used for key concepts like **Momentum, Character, Expedition**…
|
||||||
|
{% /DefinitionItem %}
|
||||||
|
|
||||||
|
{% DefinitionItem term="Italics" %}
|
||||||
|
- {% Highlighter color="primary" %}Annotation:{% /Highlighter %} `(_italics_)`
|
||||||
|
- Individual skills, conditions, check types and game states
|
||||||
|
- Use for *Melee, Poisoned, Basic Check, Out of Action,…*
|
||||||
|
{% /DefinitionItem %}
|
||||||
|
|
||||||
|
{% DefinitionItem term="Code" %}
|
||||||
|
- {% Highlighter color="primary" %}Annotation:{% /Highlighter %} `(``code``)`
|
||||||
|
- Dice Notation, calculations, and specific values
|
||||||
|
- Use for `2d6+3`, `TN 12`, `3W`
|
||||||
|
{% /DefinitionItem %}
|
||||||
|
|
||||||
|
{% DefinitionItem term="Pipes" %}
|
||||||
|
- {% Highlighter color="primary" %}Annotation:{% /Highlighter %} `(|)`
|
||||||
|
- Separates inline information and alternatives
|
||||||
|
- Use for »Roll *Defense* | *Dodge*«
|
||||||
|
{% /DefinitionItem %}
|
||||||
|
|
||||||
|
{% DefinitionItem term="Brackets" %}
|
||||||
|
- {% Highlighter color="primary" %}Annotation:{% /Highlighter %} `([optional information])`
|
||||||
|
- Indicate optional elements and situational information
|
||||||
|
- Use for »Move up to `[Movement]` and make attack«
|
||||||
|
{% /DefinitionItem %}
|
||||||
|
{% /DefinitionList %}
|
||||||
|
|
||||||
|
## Visual Symbols
|
||||||
|
|
||||||
|
Symbols provide quick visual recognition of common game effects
|
||||||
|
|
||||||
|
### Check Results
|
||||||
|
|
||||||
|
{% table .symbol-legend %}
|
||||||
|
- Check Outcome
|
||||||
|
- Symbol
|
||||||
|
---
|
||||||
|
- Bane
|
||||||
|
- **⊗**
|
||||||
|
---
|
||||||
|
- Failure
|
||||||
|
- **⊖**
|
||||||
|
---
|
||||||
|
- Complication
|
||||||
|
- **⊜**
|
||||||
|
---
|
||||||
|
- Success
|
||||||
|
- **⊕**
|
||||||
|
---
|
||||||
|
- Boon
|
||||||
|
- **⊛**
|
||||||
|
{% /table %}
|
||||||
|
|
||||||
|
### Check Difficulty
|
||||||
|
|
||||||
|
{% table .symbol-legend %}
|
||||||
|
- Check Difficulty
|
||||||
|
- Symbol
|
||||||
|
---
|
||||||
|
- Very Easy
|
||||||
|
- **○**
|
||||||
|
---
|
||||||
|
- Easy
|
||||||
|
- **◔**
|
||||||
|
---
|
||||||
|
- Routine
|
||||||
|
- **◑**
|
||||||
|
---
|
||||||
|
- Challenging
|
||||||
|
- **●**
|
||||||
|
---
|
||||||
|
- Difficult
|
||||||
|
- **∶**
|
||||||
|
---
|
||||||
|
- Hard
|
||||||
|
- **∵**
|
||||||
|
---
|
||||||
|
- Very Hard
|
||||||
|
- **∷**
|
||||||
|
---
|
||||||
|
- Impossible
|
||||||
|
- **∺**
|
||||||
|
---
|
||||||
|
- Advantage
|
||||||
|
- **⇑**
|
||||||
|
---
|
||||||
|
- Disadvantage
|
||||||
|
- **⇓**
|
||||||
|
{% /table %}
|
||||||
|
|
||||||
|
### Enemy Tiers
|
||||||
|
|
||||||
|
{% table .symbol-legend %}
|
||||||
|
- Enemy Tier
|
||||||
|
- Symbol
|
||||||
|
---
|
||||||
|
- Minion
|
||||||
|
- **⁎**
|
||||||
|
---
|
||||||
|
- Elite
|
||||||
|
- **⁑**
|
||||||
|
---
|
||||||
|
- Champion
|
||||||
|
- **⁂**
|
||||||
|
---
|
||||||
|
- Nemesis
|
||||||
|
- **⋇**
|
||||||
|
{% /table %}
|
||||||
|
|
||||||
|
### Activity Type
|
||||||
|
|
||||||
|
{% table .symbol-legend %}
|
||||||
|
- Activity Type
|
||||||
|
- Symbol
|
||||||
|
---
|
||||||
|
- Action
|
||||||
|
- **◇**
|
||||||
|
---
|
||||||
|
- Maneuver
|
||||||
|
- **⬡**
|
||||||
|
---
|
||||||
|
- Interruption
|
||||||
|
- **▽**
|
||||||
|
{% /table %}
|
||||||
|
|
||||||
|
### Player Resource
|
||||||
|
|
||||||
|
{% table .symbol-legend %}
|
||||||
|
- Resource
|
||||||
|
- Symbol
|
||||||
|
---
|
||||||
|
- Threat
|
||||||
|
- **✦**
|
||||||
|
---
|
||||||
|
- Momentum
|
||||||
|
- **✠**
|
||||||
|
---
|
||||||
|
- Fatigue
|
||||||
|
- **✱**
|
||||||
|
---
|
||||||
|
- Stress
|
||||||
|
- **❖**
|
||||||
|
---
|
||||||
|
- Corruption
|
||||||
|
- **🞼**
|
||||||
|
---
|
||||||
|
- Wounds
|
||||||
|
- **❡**
|
||||||
|
{% /table %}
|
||||||
|
|
||||||
|
### Area Effects
|
||||||
|
|
||||||
|
{% table .symbol-legend %}
|
||||||
|
- AoE
|
||||||
|
- Symbol
|
||||||
|
---
|
||||||
|
- Radius
|
||||||
|
- **⌀**
|
||||||
|
---
|
||||||
|
- Cone
|
||||||
|
- **∢**
|
||||||
|
---
|
||||||
|
- Line
|
||||||
|
- **⋮**
|
||||||
|
---
|
||||||
|
- Board Section
|
||||||
|
- **▩**
|
||||||
|
{% /table %}
|
||||||
|
|
||||||
|
## Writing Guidelines
|
||||||
|
|
||||||
|
Similar to the visual guidelines, these ideas here aim to improve readability of the document.
|
||||||
|
|
||||||
|
### Consistency Rules
|
||||||
|
|
||||||
|
1. **Capitalize major game terms:** Character, Party, Dungeon, Encounter
|
||||||
|
1. **Use consistent dice notation:** `2d6`, `1d6+2`
|
||||||
|
1. **Link frequently referenced concepts:** on first mention in document
|
||||||
|
|
||||||
|
### Accessibility
|
||||||
|
|
||||||
|
- **Always provide text alternatives** in parentheses after symbols
|
||||||
|
- **Use descriptive link text**
|
||||||
|
- **Maintain reading flow** symbols should enhance not replace, clear writing
|
||||||
@@ -1,3 +1 @@
|
|||||||
A just world is a sane world, but there is nothing sane about this
|
A just world is a sane world, but there is nothing sane about this
|
||||||
|
|
||||||

|
|
||||||
|
|||||||
3
src/content/taxonomy/tags/awq.json
Normal file
3
src/content/taxonomy/tags/awq.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"name": "AWQ"
|
||||||
|
}
|
||||||
3
src/content/taxonomy/tags/crunch.json
Normal file
3
src/content/taxonomy/tags/crunch.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"name": "Crunch"
|
||||||
|
}
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Rant against the Machine",
|
|
||||||
"description": "Where we yell at clouds"
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Was ist was",
|
|
||||||
"description": "What & how as you anglos call it. Introductions and explanations..."
|
|
||||||
}
|
|
||||||
3
src/content/taxonomy/tags/what-and-how.json
Normal file
3
src/content/taxonomy/tags/what-and-how.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"name": "Was ist Was"
|
||||||
|
}
|
||||||
@@ -1,177 +0,0 @@
|
|||||||
---
|
|
||||||
title: The Kitchensink
|
|
||||||
summary: Where we test and style output
|
|
||||||
cover: /images/covers/the-metatron/the-kitchensink/cover.jpeg
|
|
||||||
coverAlt: Smiling Dude taking apart a stranded whale with a chainsaw
|
|
||||||
publishing:
|
|
||||||
status: draft
|
|
||||||
featured: false
|
|
||||||
tags:
|
|
||||||
- rant-against-the-machine
|
|
||||||
- was-ist-was
|
|
||||||
author: dave-damage
|
|
||||||
seo:
|
|
||||||
metaTitle: Dave DMG – The Kitchen Sink
|
|
||||||
metaDescription: Where we put our stuff to the test
|
|
||||||
keywords:
|
|
||||||
- Nope
|
|
||||||
noIndex: false
|
|
||||||
---
|
|
||||||
# Statim relictis retibus et patre
|
|
||||||
|
|
||||||
Ideo dico vobis, ne solliciti sitis animæ vestræ quid manducetis, neque corpori vestro quid induamini. Nonne anima plus est quam esca, et corpus plus quam vestimentum? Respicite volatilia cæli, quoniam non serunt, *tui and trabem in* neque metunt, neque congregant in horrea et Pater vester cælestis pascit illa. Nonne vos magis pluris estis illis? Quis autem vestrum cogitans potest adjicere ad staturam suam cubitum unum? Et de vestimento quid *excidetur et* solliciti estis? Considerate lilia agri quomodo crescunt non laborant, neque nent. Dico autem vobis, quoniam nec Salomon in omni gloria sua coopertus *crescunt non* est sicut unum ex istis. Si autem fœnum agri, quod hodie est, et cras in clibanum mittitur, Deus sic vestit, quanto magis vos modicæ fidei? Nolite ergo solliciti esse, dicentes Quid manducabimus, aut quid bibemus, aut quo operiemur? hæc enim omnia gentes inquirunt. Scit enim Pater vester, quia his omnibus indigetis. Quærite ergo primum regnum Dei, et justitiam ejus et hæc omnia adjicientur.
|
|
||||||
|
|
||||||
{% DefinitionList %}
|
|
||||||
{% DefinitionItem term="Facit audiens autem jesus miratus est et" %}
|
|
||||||
Justitiam tunc dimisit eum baptizatus
|
|
||||||
{% /DefinitionItem %}
|
|
||||||
|
|
||||||
{% DefinitionItem term="Quoniam potens est" %}
|
|
||||||
```java
|
|
||||||
public class HelloWorld {
|
|
||||||
public static void main(String[] args) {
|
|
||||||
System.out.println("Hello, World!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
{% /DefinitionItem %}
|
|
||||||
|
|
||||||
{% DefinitionItem term="Eis tempus stell" %}
|
|
||||||
- Munera aurum thus et myrrham et.
|
|
||||||
- Sed super `Continuo relictis retibus secuti sunt` candelabrum ut luceat omnibus qui in.
|
|
||||||
- Dico vobis quia omnis qui
|
|
||||||
- In aquis *unus scriba* **domini** pastores ==hoc== autem **ab** fugerunt et **baptizari et tu venis** venientes.
|
|
||||||
- Neque congregant `De cælis dicens` in **hypocrit** horrea et pater vester.
|
|
||||||
- Et ego *in clis sanctificetur nomen* homo sum sub potestate constitutus.
|
|
||||||
- Dicentem dicens surge et accipe [Vocabitur in regno clorum dico enim vobis quia][6] puerum.
|
|
||||||
- Vide nemini dixeris sed.
|
|
||||||
- In diebus autem illis venit joannes
|
|
||||||
- Antiquis non *quoniam illusus* occides **facit super** qui autem.
|
|
||||||
{% /DefinitionItem %}
|
|
||||||
|
|
||||||
{% DefinitionItem term="Assimilari eis scit" %}
|
|
||||||
Ait Domine, non sum dignus ut intres sub tectum meum sed tantum dic verbo, et sanabitur puer meus. Nam et ego homo sum sub potestate constitutus, habens sub me milites, et dico huic Vade, et vadit et alii Veni, et venit et servo meo Fac hoc, et facit. Audiens autem Jesus miratus est, et sequentibus se dixit Amen dico vobis, non inveni tantam fidem in Israël. Dico autem vobis, quod multi ab oriente et occidente venient, et recumbent cum Abraham, et Isaac, et Jacob in regno cælorum filii autem regni ejicientur in tenebras exteriores ibi erit fletus et stridor *evangelium* dentium. Et dixit Jesus centurioni **quomodo medicis fratri tuo** Vade, et sicut credidisti, fiat tibi. Et sanatus *cum zebedo patre eorum* est puer in illa hora. Et cum venisset Jesus in domum Petri, vidit socrum ejus jacentem, et febricitantem et tetigit manum ejus, et dimisit eam febris, et surrexit, et ministrabat eis. Vespere autem facto, obtulerunt ei multos dæmonia habentes et ejiciebat spiritus verbo, et omnes male habentes curavit. Ut adimpleretur quod dictum est per Isaiam prophetam, dicentem Ipse infirmitates nostras accepit ægrotationes *malo amen si enim* nostras portavit. Videns autem Jesus turbas multas circum **quid autem empty** se, jussit ire trans fretum. Et accedens unus **operiemur hc** scriba, ait illi Magister, sequar te.
|
|
||||||
{% /DefinitionItem %}
|
|
||||||
|
|
||||||
{% DefinitionItem term="Assimilari eis scit" %}
|
|
||||||
**Potest duobus dominis servire aut enim** *unum odio habebit,* ~~et alterum diliget aut unum sustinebit~~, ***et alterum contemnet.*** **~~Non potestis Deo servire et mammonæ.~~** *~~Erat locustæ, et mel silvestre.~~* Tunc exibat ad eum Jerosolyma, et omnis Judæa, et omnis regio circa Jordanem; et baptizabantur ab eo in Jordane, confitentes peccata sua. Videns autem multos pharisæorum, et sadducæorum, venientes ad baptismum suum, dixit eis Progenies viperarum, quis demonstravit vobis fugere a ventura ira? Facite ergo fructum dignum pœnitentiæ. Et ne velitis dicere intra vos Patrem habemus Abraham. Dico enim vobis quoniam potens est Deus de lapidibus istis suscitare filios Abrahæ. Jam enim securis ad radicem arborum posita est. Omnis ergo arbor, quæ non facit fructum bonum, excidetur, et in ignem mittetur. Ego quidem baptizo vos in aqua in pœnitentiam qui autem post me venturus est, fortior me est, cujus non sum dignus calceamenta portare ipse vos baptizabit in Spiritu Sancto, et igni. Cujus ventilabrum in manu sua et [Fundata enim erat super petram and that omnis](https://example.com/videne/qui) permundabit aream suam et congregabit triticum [Erit si ergo lumen quod in te est](https://example.com/audi/hodiee) suum in horreum, paleas autem comburet igni inextinguibili. Tunc venit Jesus a Galilæa in Jordanem ad Joannem, ut baptizaretur ab eo. Joannes autem prohibebat eum, dicens Ego a te [Procedens inde](https://example.com/intest/nisiu) debeo baptizari, et tu venis ad me? Respondens autem Jesus, dixit ei Sine modo sic enim decet nos implere.
|
|
||||||
{% /DefinitionItem %}
|
|
||||||
{% /DefinitionList %}
|
|
||||||
|
|
||||||
### Super justos et injustos si
|
|
||||||
|
|
||||||
- Ab illis grex multorum porcorum.
|
|
||||||
- Dico vobis quia ==tunc reliquit== omnis.
|
|
||||||
- Sicut in cælo et in terra. Panem nostrum supersubstantialem da nobis hodie, et dimitte nobis debita nostra, sicut et nos dimittimus debitoribus nostris. Et ne nos inducas in tentationem, sed libera nos a malo. Amen. Si enim dimiseritis hominibus.
|
|
||||||
- Unum capillum album facere, aut nigrum. Sit autem sermo vester, est, est non, non quod autem his abundantius est, a malo est. Audistis quia dictum est Oculum pro oculo, et dentem pro dente. Ego autem dico vobis, non.
|
|
||||||
- Eo joannes autem prohibebat
|
|
||||||
- Sine modo sic enim decet nos implere omnem justitiam. Tunc dimisit eum. Baptizatus autem Jesus, confestim ascendit de aqua, et ecce aperti sunt ei cæli et vidit Spiritum Dei descendentem sicut columbam, et venientem super se. Et ecce vox de cælis dicens.Sine modo sic enim decet nos implere omnem justitiam. Tunc dimisit eum. Baptizatus autem Jesus, confestim ascendit de aqua, et ecce aperti sunt ei cæli et vidit Spiritum Dei descendentem sicut columbam, et venientem super se. Et ecce vox de cælis dicens.
|
|
||||||
- In manibus tollent te, ne forte offendas ad lapidem pedem tuum. Ait illi Jesus Rursum scriptum est Non tentabis Dominum Deum tuum. Iterum assumpsit eum diabolus in montem excelsum valde et ostendit ei omnia regna mundi, et gloriam eorum, et dixit ei Hæc omnia.
|
|
||||||
- Qualis est hic, quia venti et mare obediunt ei? Et cum venisset trans fretum in regionem Gerasenorum, occurrerunt ei duo habentes dæmonia, de monumentis exeuntes, sævi nimis, ita ut nemo posset transire per viam illam. Et ecce clamaverunt, dicentes Quid nobis et tibi, Jesu.
|
|
||||||
- Quia scabellum est pedum ejus neque per Jerosolymam, quia civitas est magni regis neque per caput tuum juraveris, quia non potes unum capillum album facere, aut nigrum. Sit autem sermo vester, est, est non, non quod autem his abundantius est, a malo est. Audistis quia dictum est Oculum.
|
|
||||||
- Enim Pater vester, quia his omnibus indigetis. Quærite ergo primum regnum Dei, et justitiam ejus et hæc omnia adjicientur vobis. Nolite ergo solliciti esse in crastinum. Crastinus enim dies sollicitus erit sibi ipsi sufficit diei malitia sua. Nolite.
|
|
||||||
- Quæ ducit ad perditionem and multi sunt which input per eam. Quam brought angusta and via arcta is Quæ ducit ad vitam pauci sunt and that inveniunt eam! Attendite has falsis Prophetis which veniunt your ad in vestimentis ovium, intrinsecus autem sunt.
|
|
||||||
- A diabolo et cum jejunasset quadraginta [Ubi](https://example.com/erit/abierun) diebus.
|
|
||||||
- Usque dum dicam tibi futurum est
|
|
||||||
- Dignus ut intres sub tectum meum
|
|
||||||
- Ei munera aurum thus *te autem* et myrrham *omnia ergo qucumque vultis* et responso.
|
|
||||||
- Eum et circuibat jesus totam galilam *puerum* docens.
|
|
||||||
- Qurebant animam pueri qui consurgens accepit
|
|
||||||
- Carcerem mittaris amen **et ecce** dico tibi non exies inde.
|
|
||||||
|
|
||||||
{% table %}
|
|
||||||
- Uxorem
|
|
||||||
- Data filiis
|
|
||||||
- Te
|
|
||||||
- Prophetam dicentem
|
|
||||||
---
|
|
||||||
- 4917
|
|
||||||
- 7167
|
|
||||||
- 1356
|
|
||||||
- 4441
|
|
||||||
---
|
|
||||||
- 3916
|
|
||||||
- 3671
|
|
||||||
- 3384
|
|
||||||
- 1812
|
|
||||||
---
|
|
||||||
- 9396
|
|
||||||
- 5812
|
|
||||||
- 6643
|
|
||||||
- 4856
|
|
||||||
---
|
|
||||||
- 3131
|
|
||||||
- 8183
|
|
||||||
- 8667
|
|
||||||
- 6427
|
|
||||||
{% /table %}
|
|
||||||
|
|
||||||
Fœnum agri, quod hodie est, et cras in clibanum mittitur, Deus sic vestit, quanto magis vos modicæ fidei? Nolite ergo solliciti esse, dicentes Quid manducabimus, aut quid bibemus, aut quo operiemur? hæc enim omnia gentes inquirunt. Scit enim Pater vester, quia his omnibus indigetis. Quærite ergo [Nostra sicut et nos](https://example.com/etmitt/prius) primum regnum Dei, et justitiam ejus et hæc omnia adjicientur vobis. Nolite ergo solliciti esse in crastinum. Crastinus enim dies sollicitus erit sibi ipsi sufficit diei malitia sua. Nolite judicare, ut not judicemini. In enim judicio judicaveritis quo, judicabimini and in four mensura Mensi fueritis, remetietur vobis. Quid autem empty festucam in oculo fratris tui and [Et tinea demolitur et ubi](https://example.com/aborien/unummem) trabem in oculo tuo non-empty? Aut quomodo *non non quod autem* Medicis fratri tuo Sine ejiciam festucam of oculo tuo and ecce trabs is in oculo tuo? Hypocrita, ejice primum [Docens eos sicut potestatem habens not](https://example.com/centuri/estau) trabem of oculo tuo and tunc videbis ejicere festucam of oculo fratris tui. Nolite dare sanctum canibus neque mittatis margaritas ante *intrabit in regnum* vestras Porcos do conculcent eas pedibus am strong, and your *sitis mali nostis bona* dirumpant.
|
|
||||||
|
|
||||||
> Est in cælis. Sic enim persecuti sunt prophetas, qui fuerunt ante vos. Vos estis sal terræ. **et** Quod si sal evanuerit, in quo salietur? ad nihilum valet ultra, nisi ut mittatur foras, et conculcetur ab hominibus. Vos estis lux mundi. Non potest civitas abscondi supra montem posita, neque accendunt lucernam, et ponunt eam sub modio, sed super candelabrum, ut luceat omnibus qui in domo sunt. Sic luceat lux vestra coram hominibus ut videant opera vestra bona, et glorificent Patrem vestrum, qui in cælis est. Nolite putare quoniam veni solvere legem aut prophetas non veni solvere, sed ==vester pater== adimplere. Amen quippe dico vobis, donec transeat cælum et terra, jota unum aut unus apex non præteribit a lege, donec omnia fiant. Qui ergo solverit unum de mandatis istis minimis, et docuerit sic homines, minimus vocabitur in regno cælorum qui autem fecerit et docuerit, hic magnus vocabitur in regno cælorum. Dico enim vobis, quia nisi abundaverit justitia vestra plus quam scribarum et pharisæorum, non intrabitis in regnum cælorum. Audistis quia dictum est antiquis Non occides qui autem occiderit, reus erit judicio. Ego autem dico vobis quia omnis qui irascitur fratri suo, reus erit judicio. Qui autem dixerit.
|
|
||||||
>
|
|
||||||
> Daemonia ejecimus and in nomine tuo virtutes multas fecimus? And tunc Confitebor illis numquam novi your Quia discedite was me who operamini iniquitatem. Omnis ergo that audit verba mea CEST and facit Others assimilabitur viro Sapienti which ædificavit domum suam petram supra, and down pluvia and venerunt flumina and flaverunt fan and irruerunt in domum illam, not cecidit Fundata enim erat super petram. And that omnis verba mea CEST audit and non facit Others similis erit viro stulto which ædificavit domum suam super arenam and down pluvia and venerunt flumina and flaverunt fan and irruerunt in domum illam and cecidit and leaking ruined illius magna. And factum is Jesus cum consummasset verba CEST, admirabantur turbæ **homines minimus vocabitur in** super doctrina jus. Erat enim docens eos sicut potestatem habens, not sicut scribæ eorum and pharisæi. Cum autem descendisset de monte, secutæ sunt eum turbæ multæ et ecce leprosus veniens, adorabat eum, dicens **et** Domine, si **no potest arbor bona** vis, potes me mundare. Et extendens Jesus manum.
|
|
||||||
>
|
|
||||||
> > Et accedens unus scriba, ait illi Magister, sequar te, quocumque ieris. Et dicit ei Jesus Vulpes foveas habent, et volucres cæli nidos; Filius autem hominis non habet ubi caput reclinet. Alius autem de discipulis ejus ait illi Domine, permitte me primum ire, et sepelire patrem meum. Jesus autem ait illi Sequere me, et dimitte mortuos sepelire mortuos suos. Et ascendente eo in naviculam, secuti sunt eum discipuli ejus et ecce motus magnus factus est in mari, ita ut navicula operiretur fluctibus ipse vero dormiebat. Et accesserunt ad eum discipuli `Dimiseritis` ejus, et suscitaverunt eum, dicentes Domine, salva nos perimus. Et dicit eis Jesus Quid timidi estis, modicæ fidei? Tunc surgens imperavit ventis, et mari, et facta est tranquillitas magna. Porro homines mirati sunt, dicentes Qualis est hic, quia venti et mare obediunt ei? Et cum venisset trans fretum in regionem Gerasenorum, occurrerunt ei duo habentes dæmonia, de monumentis exeuntes, sævi nimis, ita ut nemo posset transire per viam illam. Et ecce clamaverunt, dicentes Quid nobis et tibi, Jesu fili Dei? Venisti huc ante tempus torquere nos? Erat autem non longe ab illis grex multorum porcorum pascens. Dæmones autem rogabant eum, dicentes Si ejicis nos hinc.
|
|
||||||
>
|
|
||||||
> *— Jane Phillips*
|
|
||||||
|
|
||||||
#### Quid timidi estis modic fidei
|
|
||||||
|
|
||||||
1. Eleemosynam noli tuba canere.
|
|
||||||
1. Vade in terram isral defuncti
|
|
||||||
1. Facit fructum bonum [Te et in manibus tollent](https://example.com/fratres/estsi) excidetur et [Grotationes nostras portavit](https://example.com/abste/paci) in *quod* ignem.
|
|
||||||
|
|
||||||
1. Amant in synagogis et.
|
|
||||||
|
|
||||||
1. In terram isral audiens autem quod archelaus ==docuerit== regnaret.
|
|
||||||
|
|
||||||
- Faciat dextera tua `Venientes ad baptismum suum` ut sit.
|
|
||||||
1. Venerunt flumina and flaverunt fan and irruerunt
|
|
||||||
- Ut videantur ab hominibus **illa die in mihi** amen dico vobis.
|
|
||||||
|
|
||||||
1. Dignus ut intres sub tectum meum
|
|
||||||
1. Ei munera aurum thus *te autem* et myrrham *omnia ergo qucumque vultis* et responso.
|
|
||||||
- Eum et circuibat jesus totam galilam *puerum* docens.
|
|
||||||
- Qurebant animam pueri qui consurgens accepit
|
|
||||||
- Carcerem mittaris amen **et ecce** dico tibi non exies inde.
|
|
||||||
1. Hominibus jejunans sed [Rex judorum vidimus](https://example.com/magister/exiba) patri.
|
|
||||||
1. Pedum ejus **nephthalim** neque per **in oculo tuo nonempty** jerosolymam.
|
|
||||||
|
|
||||||
```go
|
|
||||||
package main
|
|
||||||
import "fmt"
|
|
||||||
func main() {
|
|
||||||
fmt.Println("Hello, World!")
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
That facit voluntatem Patris mei, who is in Cælis, ipse intrabit in regnum Caelorum. Multi dicent illa die in mihi Domine, Domine, in nomine tuo prophetavimus nun, and in nomine tuo Daemonia ejecimus and in nomine tuo virtutes multas fecimus? And tunc Confitebor illis numquam novi your Quia discedite was me who operamini iniquitatem. Omnis ergo that audit verba mea CEST and facit Others assimilabitur viro Sapienti which ædificavit domum suam petram supra, and down pluvia and venerunt flumina and flaverunt fan and irruerunt in domum illam, not cecidit Fundata enim erat super petram. And that omnis verba mea CEST audit and non facit Others similis erit viro stulto which ædificavit domum suam super arenam and down pluvia and venerunt flumina and flaverunt fan and irruerunt in domum illam and cecidit and leaking ruined illius magna. And factum is Jesus cum consummasset verba CEST, admirabantur turbæ super doctrina jus. Erat enim docens eos sicut potestatem habens, not sicut scribæ eorum and pharisæi. Cum autem descendisset de monte, secutæ sunt eum turbæ multæ et ecce leprosus veniens, adorabat.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
##### Est in clis sic enim persecuti
|
|
||||||
|
|
||||||
Ad baptismum suum, dixit eis Progenies viperarum, quis demonstravit vobis fugere a ventura ira? Facite ergo fructum dignum pœnitentiæ. Et ne velitis dicere intra vos Patrem habemus Abraham. Dico enim vobis quoniam potens est Deus de lapidibus istis suscitare filios Abrahæ. Jam enim securis ad radicem arborum posita est. Omnis ergo arbor, quæ non facit fructum bonum, excidetur, et in ignem mittetur. Ego quidem baptizo vos in aqua in pœnitentiam qui autem post me venturus est, fortior me est, cujus non sum dignus calceamenta portare ipse vos baptizabit in Spiritu Sancto, et igni. Cujus ventilabrum in manu sua et permundabit aream suam et congregabit triticum suum in horreum, paleas autem comburet igni inextinguibili. Tunc venit Jesus a Galilæa in Jordanem ad Joannem, ut baptizaretur ab eo. Joannes autem prohibebat eum, dicens Ego a te debeo baptizari, et tu venis ad me? Respondens autem Jesus, dixit ei Sine modo sic enim.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Et vidit Spiritum Dei descendentem sicut columbam, et venientem super se. Et ecce vox de cælis dicens Hic est Filius meus dilectus, in quo mihi complacui. Tunc Jesus ductus est in desertum a Spiritu, ut tentaretur a diabolo. Et cum jejunasset quadraginta diebus, et quadraginta noctibus, postea esuriit. Et accedens tentator dixit ei Si Filius Dei es, dic ut lapides isti panes fiant. Qui respondens dixit Scriptum est Non in solo pane vivit homo, sed in omni verbo, quod procedit de ore Dei. Tunc assumpsit eum diabolus in sanctam civitatem, et statuit eum super pinnaculum templi, et dixit ei Si Filius Dei es, mitte te deorsum. Scriptum est enim Quia angelis suis mandavit de te, et in manibus tollent te, ne forte offendas ad lapidem pedem tuum. Ait illi Jesus Rursum scriptum est Non tentabis Dominum Deum tuum. Iterum assumpsit eum diabolus in montem excelsum valde et ostendit ei omnia regna mundi, et.
|
|
||||||
|
|
||||||
###### Via spatiosa is qu ducit ad
|
|
||||||
|
|
||||||
In omni verbo, quod procedit de ore Dei. Tunc assumpsit eum diabolus in sanctam civitatem, et statuit eum super pinnaculum templi, et dixit ei Si Filius Dei es, mitte te deorsum. Scriptum est enim Quia angelis suis mandavit de te, et in manibus tollent te, ne forte offendas ad lapidem pedem tuum. Ait illi Jesus Rursum scriptum est Non tentabis Dominum Deum tuum. Iterum assumpsit eum diabolus in montem excelsum valde et ostendit ei omnia regna mundi, et gloriam eorum, et dixit ei Hæc omnia tibi dabo, si cadens adoraveris me. Tunc dicit ei Jesus Vade Satana Scriptum est enim Dominum Deum tuum *ad* adorabis, et illi soli servies. Tunc reliquit eum diabolus et ecce angeli accesserunt, et ministrabant ei. Cum autem audisset Jesus quod Joannes traditus esset, secessit in Galilæam et, relicta civitate Nazareth, venit, et habitavit in Capharnaum maritima, in finibus Zabulon et Nephthalim ut adimpleretur quod *quia his omnibus* dictum est per Isaiam prophetam Terra Zabulon, et terra Nephthalim, via maris trans Jordanem, alilæa gentium *ait illi* populus.
|
|
||||||
|
|
||||||
Congregant in horrea et Pater vester cælestis pascit illa. Nonne vos magis pluris estis illis? Quis autem vestrum cogitans potest adjicere ad staturam suam cubitum unum? Et de vestimento quid solliciti estis? Considerate lilia agri quomodo crescunt non laborant, neque nent. Dico autem vobis, quoniam nec Salomon in omni gloria sua *reddet tibi* coopertus est sicut unum ex istis. Si autem fœnum agri, quod hodie est, et cras in clibanum mittitur, Deus sic vestit, quanto magis vos modicæ fidei? Nolite ergo solliciti esse, dicentes Quid manducabimus, aut quid bibemus, aut quo operiemur? hæc enim omnia gentes inquirunt. Scit enim Pater vester, quia his omnibus indigetis. Quærite ergo primum regnum Dei, et justitiam ejus et hæc omnia adjicientur vobis. Nolite ergo solliciti esse in *est* crastinum. Crastinus enim dies sollicitus erit sibi ipsi sufficit diei malitia sua. Nolite judicare, ut not judicemini. In enim judicio judicaveritis quo, judicabimini and in four mensura *videantur ab* Mensi fueritis, remetietur vobis. Quid autem empty festucam in oculo.
|
|
||||||
|
|
||||||
Homines and your facite illis. CEST is enim lex and Prophetae. Per INTRATE angustam portam quia carried lata and via spatiosa is Quæ ducit ad perditionem and multi sunt which input per eam. Quam brought angusta and via arcta is Quæ ducit ad vitam pauci sunt and that inveniunt eam! Attendite has falsis Prophetis which veniunt your ad in vestimentis ovium, intrinsecus autem sunt lupi raptors has fructibus eorum cognoscetis eos. Numquid colligunt of Spinas uvas, aut Tribulis ficus? Sic omnis arbor bona fructus bonos facit mala autem arbor malos fructus facit. No potest arbor bona malos fructus facere neque arbor mala bonos fructus facere. Omnis arbor, Quae not facit fructum bonum, excidetur and in ignem mittetur. Igitur ex fructibus eorum cognoscetis eos. Non omnis who dicit mihi, Domine, Domine, intrabit in regnum Caelorum sed that facit voluntatem Patris mei, who is in Cælis, ipse intrabit in regnum Caelorum. Multi dicent illa die in mihi Domine, Domine, in nomine tuo prophetavimus **fratri suo reus** nun, and in nomine tuo Daemonia ejecimus and in nomine tuo virtutes multas fecimus? And tunc Confitebor illis numquam novi your Quia discedite was me who `Ipsi possidebunt terram. Beati qui` operamini iniquitatem. Omnis ergo **intrinsecus autem sunt lupi** that audit *vulpes **alteram et ei qui** foveas* verba mea CEST *judex tradat* and facit.
|
|
||||||
|
|
||||||
Vobis fugere a ventura ira? Facite ergo fructum dignum pœnitentiæ. Et ne velitis dicere intra vos Patrem habemus Abraham. Dico enim vobis quoniam potens est Deus de lapidibus istis suscitare filios Abrahæ. Jam enim securis ad radicem arborum posita est. Omnis ergo arbor, quæ non facit fructum bonum, excidetur, et in ignem mittetur. Ego quidem baptizo vos in aqua in pœnitentiam qui autem post me venturus est, fortior me est, cujus non sum dignus calceamenta portare ipse vos baptizabit in Spiritu Sancto, et igni. Cujus ventilabrum in manu sua et permundabit aream suam et congregabit triticum suum in horreum, paleas autem comburet igni inextinguibili. Tunc venit Jesus a Galilæa in Jordanem ad Joannem, ut baptizaretur ab eo. Joannes autem prohibebat eum, dicens Ego a te debeo baptizari, et tu venis ad me? Respondens autem Jesus, dixit ei Sine modo sic enim decet nos implere omnem justitiam. Tunc dimisit eum. Baptizatus autem Jesus, confestim ascendit de aqua.
|
|
||||||
|
|
||||||
Pater vester cælestis delicta vestra. Si autem non dimiseritis hominibus nec Pater vester dimittet vobis peccata vestra. Cum autem jejunatis, nolite fieri sicut hypocritæ, tristes. Exterminant enim facies suas, ut appareant hominibus jejunantes. Amen dico vobis, quia receperunt mercedem suam. Tu autem, cum jejunas, unge caput tuum, et faciem tuam lava, ne videaris hominibus jejunans, sed Patri tuo, qui est in abscondito et Pater tuus, qui videt in abscondito, reddet tibi. Nolite thesaurizare vobis thesauros in terra ubi ærugo, et tinea demolitur et ubi fures effodiunt, et furantur. Thesaurizate autem vobis thesauros in cælo, ubi neque ærugo, neque tinea demolitur, et ubi fures non effodiunt, nec furantur. Ubi enim est thesaurus tuus, ibi est et cor tuum. Lucerna corporis tui est oculus tuus. Si oculus tuus fuerit simplex, totum corpus tuum lucidum erit. Si autem oculus tuus fuerit nequam, totum corpus tuum tenebrosum erit. Si ergo lumen, quod in te est, tenebræ sunt ipsæ tenebræ quantæ erunt? Nemo potest duobus dominis servire aut enim unum odio habebit, et alterum diliget aut unum sustinebit, et alterum contemnet. Non potestis Deo servire et mammonæ. Ideo dico vobis, ne solliciti sitis animæ vestræ quid manducetis, neque corpori vestro quid.
|
|
||||||
|
|
||||||
Omnem infirmitatem in populo. Et abiit opinio ejus in totam Syriam, et obtulerunt ei omnes male habentes, variis languoribus, et tormentis comprehensos, et qui dæmonia habebant, et lunaticos, et paralyticos, et curavit eos et secutæ sunt eum turbæ multæ de Galilæa, et Decapoli, et de Jerosolymis, et de Judæa, et de trans Jordanem. Videns autem Jesus turbas, ascendit in montem, et cum sedisset, accesserunt ad eum discipuli ejus, et aperiens os suum docebat eos dicens Beati pauperes spiritu quoniam ipsorum est regnum cælorum. Beati mites quoniam ipsi possidebunt terram. Beati qui lugent quoniam ipsi consolabuntur. Beati qui esuriunt et sitiunt justitiam quoniam ipsi saturabuntur. Beati misericordes quoniam ipsi misericordiam consequentur. Beati mundo corde quoniam ipsi Deum videbunt. Beati pacifici quoniam filii Dei vocabuntur. Beati qui persecutionem patiuntur propter justitiam quoniam ipsorum est regnum cælorum. Beati estis cum maledixerint vobis, et persecuti vos fuerint, et dixerint omne malum adversum vos mentientes, propter.
|
|
||||||
|
|
||||||
Ejus nocte, et secessit in Ægyptum et erat ibi usque ad obitum Herodis ut adimpleretur quod dictum est a Domino per prophetam dicentem Ex Ægypto vocavi filium meum. Tunc Herodes videns quoniam illusus esset a magis, iratus est valde, et mittens occidit omnes pueros, qui erant in Bethlehem, et in omnibus finibus ejus, a bimatu et infra secundum tempus, quod exquisierat a magis. Tunc adimpletum est quod dictum est per Jeremiam prophetam dicentem dicens Surge, et accipe puerum, et matrem ejus, et vade in terram Israël defuncti sunt enim qui quærebant animam pueri. Qui consurgens, accepit puerum, et matrem ejus, et venit in terram Israël. Audiens autem quod Archelaus regnaret in Judæa pro Herode patre suo, timuit illo ire et admonitus in somnis, secessit in partes Galilææ. Et veniens habitavit in civitate quæ vocatur Nazareth ut adimpleretur quod dictum est per prophetas Quoniam Nazaræus vocabitur. In diebus autem illis venit Joannes Baptista prædicans in deserto Judææ, et dicens Pœnitentiam agite appropinquavit enim regnum cælorum. Hic est enim, qui dictus est per Isaiam prophetam dicentem Vox clamantis in deserto Parate viam Domini; rectas.
|
|
||||||
|
|
||||||
Ipsi consolabuntur. Beati qui esuriunt et sitiunt justitiam quoniam ipsi saturabuntur. Beati misericordes quoniam ipsi misericordiam consequentur. Beati mundo corde quoniam ipsi Deum videbunt. Beati pacifici quoniam filii Dei vocabuntur. Beati qui persecutionem patiuntur propter justitiam quoniam ipsorum est regnum cælorum. Beati estis cum maledixerint vobis, et persecuti vos fuerint, et dixerint omne malum adversum vos mentientes, propter me gaudete, et exsultate, quoniam merces vestra copiosa est in cælis. Sic enim persecuti sunt prophetas, qui fuerunt ante vos. Vos estis sal terræ. Quod si sal evanuerit, in quo salietur? ad nihilum valet ultra, nisi ut mittatur foras, et conculcetur ab hominibus. Vos estis lux ==four== mundi. Non potest civitas abscondi supra montem posita, neque accendunt lucernam, et ponunt eam sub modio, sed super candelabrum, ut luceat omnibus qui in domo sunt. Sic luceat lux vestra coram hominibus ut videant opera vestra bona, et glorificent Patrem vestrum, qui in cælis est. Nolite putare quoniam veni solvere legem aut prophetas non veni solvere, sed adimplere. Amen quippe dico vobis, donec transeat cælum et terra, jota unum aut unus apex non præteribit a lege, donec omnia fiant. Qui ergo solverit unum de mandatis istis minimis, et docuerit sic homines, minimus vocabitur.
|
|
||||||
28
src/layouts/AWQLayout/index.tsx
Normal file
28
src/layouts/AWQLayout/index.tsx
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import '@/styles/themes/awq.css'
|
||||||
|
|
||||||
|
import { AWQContent } from '~/types/keystatic'
|
||||||
|
|
||||||
|
import { ArticleLayout } from '@/layouts/ArticleLayout'
|
||||||
|
import React from 'react'
|
||||||
|
|
||||||
|
interface AWQLayoutProps {
|
||||||
|
article: AWQContent
|
||||||
|
breadcrumbs: string[]
|
||||||
|
children: React.ReactNode
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function AWQLayout({
|
||||||
|
article,
|
||||||
|
breadcrumbs,
|
||||||
|
children,
|
||||||
|
}: AWQLayoutProps) {
|
||||||
|
return (
|
||||||
|
<ArticleLayout
|
||||||
|
article={article}
|
||||||
|
breadcrumbs={breadcrumbs}
|
||||||
|
className={`page awq-page`}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</ArticleLayout>
|
||||||
|
)
|
||||||
|
}
|
||||||
37
src/layouts/ArticleLayout/index.tsx
Normal file
37
src/layouts/ArticleLayout/index.tsx
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import { PageHeader } from '@/components/Page/Header'
|
||||||
|
import { getAuthorBySlug } from '@/lib/content/taxonomy/authors'
|
||||||
|
import { getTagBySlug } from '@/lib/content/taxonomy/tags'
|
||||||
|
import type { ArticleContent } from '~/types/keystatic'
|
||||||
|
|
||||||
|
interface ArticleLayoutProps {
|
||||||
|
article: ArticleContent
|
||||||
|
breadcrumbs: string[]
|
||||||
|
children: React.ReactNode
|
||||||
|
className?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function ArticleLayout({
|
||||||
|
article,
|
||||||
|
breadcrumbs,
|
||||||
|
children,
|
||||||
|
className = 'page',
|
||||||
|
}: ArticleLayoutProps) {
|
||||||
|
const author = article.publishing?.author
|
||||||
|
? await getAuthorBySlug(article.publishing.author)
|
||||||
|
: null
|
||||||
|
const tags = article.publishing?.tags
|
||||||
|
? await Promise.all(article.publishing.tags.map(getTagBySlug))
|
||||||
|
: []
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={className}>
|
||||||
|
<PageHeader
|
||||||
|
article={article}
|
||||||
|
breadcrumbs={breadcrumbs}
|
||||||
|
author={author}
|
||||||
|
tags={tags}
|
||||||
|
/>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
9
src/lib/content/awq/articles.ts
Normal file
9
src/lib/content/awq/articles.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { cache, reader } from '@/lib/content/base'
|
||||||
|
|
||||||
|
export const getArticles = cache(async () =>
|
||||||
|
reader.collections['awq_posts'].all()
|
||||||
|
)
|
||||||
|
|
||||||
|
export const getArticleBySlug = cache(async (slug: string) =>
|
||||||
|
reader.collections['awq_posts'].read(slug)
|
||||||
|
)
|
||||||
32
src/lib/content/awq/collector.ts
Normal file
32
src/lib/content/awq/collector.ts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import { getArticles } from '@/lib/content/awq/articles'
|
||||||
|
import { getTalents } from '@/lib/content/awq/talents'
|
||||||
|
import { cache } from 'react'
|
||||||
|
|
||||||
|
export const collectAWQContent = cache(async () => {
|
||||||
|
const [articles, talents] = await Promise.all([getArticles(), getTalents()])
|
||||||
|
|
||||||
|
return [
|
||||||
|
...articles.map((item) => ({
|
||||||
|
...item.entry,
|
||||||
|
slug: item.slug,
|
||||||
|
type: 'article',
|
||||||
|
fullPath:
|
||||||
|
item.slug === 'index'
|
||||||
|
? item.entry.path
|
||||||
|
: item.entry.path
|
||||||
|
? `${item.entry.path}/${item.slug}`
|
||||||
|
: item.slug,
|
||||||
|
})),
|
||||||
|
...talents.map((item) => ({
|
||||||
|
...item.entry,
|
||||||
|
slug: item.slug,
|
||||||
|
type: 'talent',
|
||||||
|
fullPath: item.entry.path ? `${item.entry.path}/${item.slug}` : item.slug,
|
||||||
|
})),
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
export const getContentByPath = cache(async (path: string) => {
|
||||||
|
const allContent = await collectAWQContent()
|
||||||
|
return allContent.find((item) => item.fullPath === path)
|
||||||
|
})
|
||||||
9
src/lib/content/awq/talents.ts
Normal file
9
src/lib/content/awq/talents.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { cache, reader } from '@/lib/content/base'
|
||||||
|
|
||||||
|
export const getTalents = cache(async () =>
|
||||||
|
reader.collections['awq_talents'].all()
|
||||||
|
)
|
||||||
|
|
||||||
|
export const getTalentBySlug = cache(async (slug: string) =>
|
||||||
|
reader.collections['awq_talents'].read(slug)
|
||||||
|
)
|
||||||
@@ -2,6 +2,7 @@ import { cache, reader } from '@/lib/content/base'
|
|||||||
|
|
||||||
export const getAuthors = cache(async () => reader.collections['authors'].all())
|
export const getAuthors = cache(async () => reader.collections['authors'].all())
|
||||||
|
|
||||||
export const getAuthorBySlug = cache(async (slug: string) =>
|
export const getAuthorBySlug = cache(async (slug: string) => {
|
||||||
reader.collections['authors'].read(slug)
|
const author = await reader.collections.authors.read(slug)
|
||||||
)
|
return author ? { ...author, slug } : null
|
||||||
|
})
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { cache, reader } from '@/lib/content/base'
|
|||||||
|
|
||||||
export const getTags = cache(async () => reader.collections['tags'].all())
|
export const getTags = cache(async () => reader.collections['tags'].all())
|
||||||
|
|
||||||
export const getTagBySlug = cache(async (slug: string) =>
|
export const getTagBySlug = cache(async (slug: string) => {
|
||||||
reader.collections['tags'].read(slug)
|
const tag = await reader.collections.tags.read(slug)
|
||||||
)
|
return tag ? { ...tag, slug } : null
|
||||||
|
})
|
||||||
|
|||||||
19
src/lib/keystatic/collections/awq/article.ts
Normal file
19
src/lib/keystatic/collections/awq/article.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import { createArticleFields } from '@/lib/keystatic/fields/article'
|
||||||
|
import { collection, fields } from '@keystatic/core'
|
||||||
|
|
||||||
|
export const AWQPostsCollection = collection({
|
||||||
|
label: 'AWQ – Posts',
|
||||||
|
slugField: 'title',
|
||||||
|
path: 'src/content/awq/articles/*',
|
||||||
|
columns: ['path', 'title'],
|
||||||
|
entryLayout: 'content',
|
||||||
|
format: { contentField: 'content' },
|
||||||
|
schema: {
|
||||||
|
path: fields.text({
|
||||||
|
label: 'Path',
|
||||||
|
description: 'Path on the website',
|
||||||
|
defaultValue: '',
|
||||||
|
}),
|
||||||
|
...createArticleFields('awq'),
|
||||||
|
},
|
||||||
|
})
|
||||||
17
src/lib/keystatic/collections/awq/talents.ts
Normal file
17
src/lib/keystatic/collections/awq/talents.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { createArticleFields } from '@/lib/keystatic/fields/article'
|
||||||
|
import { collection, fields } from '@keystatic/core'
|
||||||
|
|
||||||
|
export const AWQTalentsCollection = collection({
|
||||||
|
label: 'AWQ – Talents',
|
||||||
|
slugField: 'title',
|
||||||
|
path: 'src/content/awq/talents/*',
|
||||||
|
format: { contentField: 'content' },
|
||||||
|
schema: {
|
||||||
|
path: fields.text({
|
||||||
|
label: 'Path',
|
||||||
|
description: 'Path on the website',
|
||||||
|
defaultValue: 'characters/talents',
|
||||||
|
}),
|
||||||
|
...createArticleFields('awq'),
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -13,14 +13,5 @@ export const AuthorsCollection = collection({
|
|||||||
publicPath: '/images/authors',
|
publicPath: '/images/authors',
|
||||||
}),
|
}),
|
||||||
description: fields.text({ label: 'Description', multiline: true }),
|
description: fields.text({ label: 'Description', multiline: true }),
|
||||||
test: fields.markdoc({
|
|
||||||
label: 'Test',
|
|
||||||
options: {
|
|
||||||
image: {
|
|
||||||
directory: 'public/images/authors',
|
|
||||||
publicPath: '/images/authors',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
22
src/lib/keystatic/components/Inline.ts
Normal file
22
src/lib/keystatic/components/Inline.ts
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { highlighterIcon } from '@keystar/ui/icon/icons/highlighterIcon'
|
||||||
|
import { fields } from '@keystatic/core'
|
||||||
|
import { mark } from '@keystatic/core/content-components'
|
||||||
|
|
||||||
|
export const inlineComponents = {
|
||||||
|
Highlighter: mark({
|
||||||
|
label: 'Highlighter',
|
||||||
|
icon: highlighterIcon,
|
||||||
|
schema: {
|
||||||
|
color: fields.select({
|
||||||
|
label: 'color',
|
||||||
|
options: [
|
||||||
|
{ label: 'Primary', value: 'primary' },
|
||||||
|
{ label: 'Secondary', value: 'secondary' },
|
||||||
|
{ label: 'Tertiary', value: 'tertiary' },
|
||||||
|
{ label: 'Quarternary', value: 'quarternary' },
|
||||||
|
],
|
||||||
|
defaultValue: 'primary',
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
}
|
||||||
@@ -6,12 +6,19 @@ import { createSeoField } from './seo'
|
|||||||
export const createArticleFields = (imageSubfolder: string) => ({
|
export const createArticleFields = (imageSubfolder: string) => ({
|
||||||
title: fields.slug({ name: { label: 'Title' } }),
|
title: fields.slug({ name: { label: 'Title' } }),
|
||||||
summary: fields.text({ label: 'Summary', multiline: true }),
|
summary: fields.text({ label: 'Summary', multiline: true }),
|
||||||
cover: fields.image({
|
cover: fields.object({
|
||||||
|
src: fields.image({
|
||||||
label: 'Cover Image',
|
label: 'Cover Image',
|
||||||
directory: `public/images/covers/${imageSubfolder}`,
|
directory: `public/images/covers/${imageSubfolder}`,
|
||||||
publicPath: `/images/covers/${imageSubfolder}`,
|
publicPath: `/images/covers/${imageSubfolder}`,
|
||||||
}),
|
}),
|
||||||
coverAlt: fields.text({ label: 'Cover Alt Text' }),
|
alt: fields.text({ label: 'Alt' }),
|
||||||
|
caption: fields.text({ label: 'Caption', multiline: true }),
|
||||||
|
showInHeader: fields.checkbox({
|
||||||
|
label: 'Show in Header',
|
||||||
|
defaultValue: false,
|
||||||
|
}),
|
||||||
|
}),
|
||||||
publishing: createPublishingField(),
|
publishing: createPublishingField(),
|
||||||
seo: createSeoField(),
|
seo: createSeoField(),
|
||||||
content: createContentField(imageSubfolder),
|
content: createContentField(imageSubfolder),
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { definitionListComponents } from '@/lib/keystatic/components/DefinitionList'
|
import { definitionListComponents } from '@/lib/keystatic/components/DefinitionList'
|
||||||
|
import { inlineComponents } from '@/lib/keystatic/components/Inline'
|
||||||
import { fields } from '@keystatic/core'
|
import { fields } from '@keystatic/core'
|
||||||
|
|
||||||
export const createContentField = (imageSubfolder: string) =>
|
export const createContentField = (imageSubfolder: string) =>
|
||||||
@@ -12,5 +13,6 @@ export const createContentField = (imageSubfolder: string) =>
|
|||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
...definitionListComponents,
|
...definitionListComponents,
|
||||||
|
...inlineComponents,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import { fields } from '@keystatic/core'
|
|||||||
export const createPublishingField = (): ComponentSchema =>
|
export const createPublishingField = (): ComponentSchema =>
|
||||||
fields.object(
|
fields.object(
|
||||||
{
|
{
|
||||||
publishDate: fields.date({ label: 'Publish Date' }),
|
publishDate: fields.datetime({ label: 'Publish Date' }),
|
||||||
editDate: fields.date({ label: 'Edit Date' }),
|
editDate: fields.datetime({ label: 'Edit Date' }),
|
||||||
status: fields.select({
|
status: fields.select({
|
||||||
label: 'Status',
|
label: 'Status',
|
||||||
options: [
|
options: [
|
||||||
|
|||||||
@@ -10,4 +10,10 @@ export const tags: Config['tags'] = {
|
|||||||
term: { type: String, required: true },
|
term: { type: String, required: true },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Highlighter: {
|
||||||
|
render: 'Highlight',
|
||||||
|
attributes: {
|
||||||
|
color: { type: String, default: 'primary' },
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
25
src/lib/utils/date.ts
Normal file
25
src/lib/utils/date.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
export function toMilitaryDTG(datestring: string, timeZone = 'Z') {
|
||||||
|
const date = new Date(datestring)
|
||||||
|
date.setUTCHours(0o6, 59)
|
||||||
|
const day = date.getUTCDate().toString().padStart(2, '0')
|
||||||
|
const hours = date.getUTCHours().toString().padStart(2, '0')
|
||||||
|
const minutes = date.getUTCMinutes().toString().padStart(2, '0')
|
||||||
|
const months = [
|
||||||
|
'JAN',
|
||||||
|
'FEB',
|
||||||
|
'MAR',
|
||||||
|
'APR',
|
||||||
|
'MAY',
|
||||||
|
'JUN',
|
||||||
|
'JUL',
|
||||||
|
'AUG',
|
||||||
|
'SEP',
|
||||||
|
'OCT',
|
||||||
|
'NOV',
|
||||||
|
'DEC',
|
||||||
|
]
|
||||||
|
const month = months[date.getUTCMonth()]
|
||||||
|
const year = date.getUTCFullYear().toString().slice(-2)
|
||||||
|
|
||||||
|
return `${day}${hours}${minutes}${timeZone}${month}${year}`
|
||||||
|
}
|
||||||
@@ -20,7 +20,6 @@
|
|||||||
--color-palette-very-pale-gray: oklch(94.3% 0 89.876deg); /* Gallery: #ECECEC */
|
--color-palette-very-pale-gray: oklch(94.3% 0 89.876deg); /* Gallery: #ECECEC */
|
||||||
--color-palette-off-white: oklch(98.1% 0.003 247.858deg); /* Catskill White: #F7F9fB */
|
--color-palette-off-white: oklch(98.1% 0.003 247.858deg); /* Catskill White: #F7F9fB */
|
||||||
--color-palette-cat-squeeze: oklch(98.3% 0.004 236.496deg); /* Cat Squeeze: #F7FAFC */
|
--color-palette-cat-squeeze: oklch(98.3% 0.004 236.496deg); /* Cat Squeeze: #F7FAFC */
|
||||||
--color-palette-smoky-mauve: oklch(50% 0.054 308.622deg); /* Smoky: #6C5B7B */
|
|
||||||
|
|
||||||
/* == Reds == */
|
/* == Reds == */
|
||||||
--color-palette-oxblood: oklch(30.5% 0.122 12.109deg); /* Bordeaux: #5D001E */
|
--color-palette-oxblood: oklch(30.5% 0.122 12.109deg); /* Bordeaux: #5D001E */
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
--el-h3-line-height: 1.2;
|
--el-h3-line-height: 1.2;
|
||||||
--el-h3-text-transform: uppercase;
|
--el-h3-text-transform: uppercase;
|
||||||
--el-h3-vspace-base: calc(1em * var(--el-h3-line-height));
|
--el-h3-vspace-base: calc(1em * var(--el-h3-line-height));
|
||||||
--el-h3-vspace-top: calc(var(--el-h3-vspace-base) * var(--vspace-relaxed));
|
--el-h3-vspace-top: calc(var(--el-h3-vspace-base) * var(--vspace-cozy));
|
||||||
--el-h3-vspace-bottom: calc(var(--el-h3-vspace-base) * var(--vspace-snug));
|
--el-h3-vspace-bottom: calc(var(--el-h3-vspace-base) * var(--vspace-snug));
|
||||||
|
|
||||||
/* === H4 VARIABLES === */
|
/* === H4 VARIABLES === */
|
||||||
|
|||||||
16
src/styles/themes/awq.css
Normal file
16
src/styles/themes/awq.css
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
:root {
|
||||||
|
--el-h1-font-family: "Blaka", "Blaka Fallback";
|
||||||
|
--el-h1-letter-spacing: var(--typo-spacing-relaxed);
|
||||||
|
--el-h1-font-weight: var(--typo-weight-regular);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.awq-page {
|
||||||
|
& article {
|
||||||
|
& > p:first-of-type {
|
||||||
|
&::first-letter {
|
||||||
|
font-family: Blaka, "Blaka Fallback", fantasy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
1
src/styles/tools.css
Normal file
1
src/styles/tools.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
@import url("./tools/tables.css");
|
||||||
23
src/styles/tools/tables.css
Normal file
23
src/styles/tools/tables.css
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
.symbol-legend {
|
||||||
|
table-layout: fixed;
|
||||||
|
|
||||||
|
& td:nth-child(1) {
|
||||||
|
width: var(--size-16);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
& strong {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
width: 1.25em;
|
||||||
|
height: 1.25em;
|
||||||
|
border-radius: 50%;
|
||||||
|
|
||||||
|
font-size: 2em;
|
||||||
|
font-variant-numeric: tabular-nums;
|
||||||
|
line-height: 1;
|
||||||
|
color: var(--color-primary);
|
||||||
|
}
|
||||||
|
}
|
||||||
19
types/keystatic.ts
Normal file
19
types/keystatic.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import { Entry } from '@keystatic/core/reader'
|
||||||
|
import keystaticConfig from '~/keystatic.config'
|
||||||
|
|
||||||
|
export type Author = Entry<(typeof keystaticConfig.collections)['authors']>
|
||||||
|
export type Tag = Entry<(typeof keystaticConfig.collections)['tags']>
|
||||||
|
export type AWQArticle = Entry<
|
||||||
|
(typeof keystaticConfig.collections)['awq_posts']
|
||||||
|
>
|
||||||
|
export type AWQTalent = Entry<
|
||||||
|
(typeof keystaticConfig.collections)['awq_talents']
|
||||||
|
>
|
||||||
|
export type MetaArticle = Entry<
|
||||||
|
(typeof keystaticConfig.collections)['meta_posts']
|
||||||
|
>
|
||||||
|
|
||||||
|
export type AWQContent = AWQArticle | AWQTalent
|
||||||
|
export type MetaContent = MetaArticle
|
||||||
|
|
||||||
|
export type ArticleContent = AWQContent | MetaContent
|
||||||
Reference in New Issue
Block a user