opencode-skills-collection 3.1.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-skills/.antigravity-install-manifest.json +84 -1
- package/bundled-skills/android-ui-journey-testing/SKILL.md +191 -0
- package/bundled-skills/ask-matt/SKILL.md +92 -0
- package/bundled-skills/bugs-are-annoying/SKILL.md +137 -0
- package/bundled-skills/codebase-design/DEEPENING.md +37 -0
- package/bundled-skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
- package/bundled-skills/codebase-design/SKILL.md +145 -0
- package/bundled-skills/competitor-analysis/LICENSE.txt +21 -0
- package/bundled-skills/competitor-analysis/SKILL.md +434 -0
- package/bundled-skills/competitor-analysis/references/battle-card-subagent.md +127 -0
- package/bundled-skills/competitor-analysis/references/battle-card.md +91 -0
- package/bundled-skills/competitor-analysis/references/example-research.md +130 -0
- package/bundled-skills/competitor-analysis/references/report-template.html +127 -0
- package/bundled-skills/competitor-analysis/references/research-patterns.md +217 -0
- package/bundled-skills/competitor-analysis/references/workflow.md +434 -0
- package/bundled-skills/competitor-analysis/scripts/capture_screenshots.mjs +142 -0
- package/bundled-skills/competitor-analysis/scripts/compile_report.mjs +929 -0
- package/bundled-skills/competitor-analysis/scripts/extract_vs_names.mjs +140 -0
- package/bundled-skills/competitor-analysis/scripts/gate_candidates.mjs +194 -0
- package/bundled-skills/competitor-analysis/scripts/list_urls.mjs +90 -0
- package/bundled-skills/competitor-analysis/scripts/md_utils.mjs +50 -0
- package/bundled-skills/competitor-analysis/scripts/merge_partials.mjs +291 -0
- package/bundled-skills/competitor-analysis/scripts/package.json +6 -0
- package/bundled-skills/design-it/3d-ui/SKILL.md +259 -0
- package/bundled-skills/design-it/SKILL.md +170 -0
- package/bundled-skills/design-it/ai-native-ui/SKILL.md +295 -0
- package/bundled-skills/design-it/aurora-ui/SKILL.md +307 -0
- package/bundled-skills/design-it/bento-ui/SKILL.md +314 -0
- package/bundled-skills/design-it/brutalism/SKILL.md +270 -0
- package/bundled-skills/design-it/brutalist-typography/SKILL.md +287 -0
- package/bundled-skills/design-it/card-based-design/SKILL.md +262 -0
- package/bundled-skills/design-it/claymorphism/SKILL.md +287 -0
- package/bundled-skills/design-it/color-blocking/SKILL.md +278 -0
- package/bundled-skills/design-it/command-center-ui/SKILL.md +345 -0
- package/bundled-skills/design-it/cyber-y2k/SKILL.md +312 -0
- package/bundled-skills/design-it/cyberpunk-ui/SKILL.md +262 -0
- package/bundled-skills/design-it/dark-mode/SKILL.md +289 -0
- package/bundled-skills/design-it/dashboard-design/SKILL.md +331 -0
- package/bundled-skills/design-it/data-dense-design/SKILL.md +322 -0
- package/bundled-skills/design-it/duotone-design/SKILL.md +248 -0
- package/bundled-skills/design-it/editorial-design/SKILL.md +328 -0
- package/bundled-skills/design-it/flat-design/SKILL.md +221 -0
- package/bundled-skills/design-it/flat-design-2/SKILL.md +240 -0
- package/bundled-skills/design-it/floating-ui/SKILL.md +299 -0
- package/bundled-skills/design-it/frutiger-aero/SKILL.md +274 -0
- package/bundled-skills/design-it/glassmorphism/SKILL.md +272 -0
- package/bundled-skills/design-it/gradient-design/SKILL.md +309 -0
- package/bundled-skills/design-it/high-contrast/SKILL.md +288 -0
- package/bundled-skills/design-it/holographic-ui/SKILL.md +310 -0
- package/bundled-skills/design-it/isometric-design/SKILL.md +228 -0
- package/bundled-skills/design-it/layered-design/SKILL.md +247 -0
- package/bundled-skills/design-it/material-design/SKILL.md +275 -0
- package/bundled-skills/design-it/maximalism/SKILL.md +297 -0
- package/bundled-skills/design-it/minimalism/SKILL.md +267 -0
- package/bundled-skills/design-it/monochromatic-ui/SKILL.md +296 -0
- package/bundled-skills/design-it/neo-brutalism/SKILL.md +270 -0
- package/bundled-skills/design-it/neumorphism/SKILL.md +248 -0
- package/bundled-skills/design-it/retro-design/SKILL.md +283 -0
- package/bundled-skills/design-it/retro-futurism/SKILL.md +259 -0
- package/bundled-skills/design-it/sci-fi-interface/SKILL.md +309 -0
- package/bundled-skills/design-it/skeuomorphism/SKILL.md +280 -0
- package/bundled-skills/design-it/soft-pastel/SKILL.md +307 -0
- package/bundled-skills/design-it/spatial-computing-ui/SKILL.md +300 -0
- package/bundled-skills/design-it/spatial-design/SKILL.md +268 -0
- package/bundled-skills/design-it/swiss-design/SKILL.md +293 -0
- package/bundled-skills/design-it/synthwave/SKILL.md +257 -0
- package/bundled-skills/design-it/tile-design/SKILL.md +297 -0
- package/bundled-skills/design-it/typography-first/SKILL.md +247 -0
- package/bundled-skills/design-it/vaporwave/SKILL.md +331 -0
- package/bundled-skills/design-it/vibrant-maximalism/SKILL.md +291 -0
- package/bundled-skills/design-it/widget-based-design/SKILL.md +274 -0
- package/bundled-skills/design-it/y2k-design/SKILL.md +268 -0
- package/bundled-skills/diagnosing-bugs/SKILL.md +165 -0
- package/bundled-skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
- package/bundled-skills/docs/contributors/skill-scoring.md +235 -0
- package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
- package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
- package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
- package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
- package/bundled-skills/docs/users/bundles.md +1 -1
- package/bundled-skills/docs/users/claude-code-skills.md +1 -1
- package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
- package/bundled-skills/docs/users/getting-started.md +1 -1
- package/bundled-skills/docs/users/kiro-integration.md +1 -1
- package/bundled-skills/docs/users/usage.md +4 -4
- package/bundled-skills/docs/users/visual-guide.md +4 -4
- package/bundled-skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/bundled-skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/bundled-skills/domain-modeling/SKILL.md +105 -0
- package/bundled-skills/grill-me/SKILL.md +36 -0
- package/bundled-skills/grill-with-docs/SKILL.md +36 -0
- package/bundled-skills/grilling/SKILL.md +39 -0
- package/bundled-skills/handoff/SKILL.md +45 -0
- package/bundled-skills/image-generator/.env.example +7 -0
- package/bundled-skills/image-generator/SKILL.md +509 -0
- package/bundled-skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
- package/bundled-skills/improve-codebase-architecture/SKILL.md +97 -0
- package/bundled-skills/learn/SKILL.md +156 -0
- package/bundled-skills/lesson-generator/SKILL.md +90 -0
- package/bundled-skills/llm-council/.env.example +7 -0
- package/bundled-skills/llm-council/SKILL.md +602 -0
- package/bundled-skills/loop-library/SKILL.md +205 -0
- package/bundled-skills/loop-library/agents/openai.yaml +4 -0
- package/bundled-skills/loop-library/references/catalog.md +270 -0
- package/bundled-skills/mailtrap-managing-contacts/SKILL.md +112 -0
- package/bundled-skills/mailtrap-sending-emails/SKILL.md +167 -0
- package/bundled-skills/mailtrap-setting-up-sending-domain/SKILL.md +77 -0
- package/bundled-skills/mailtrap-testing-with-sandbox/SKILL.md +110 -0
- package/bundled-skills/prototype/LOGIC.md +79 -0
- package/bundled-skills/prototype/SKILL.md +62 -0
- package/bundled-skills/prototype/UI.md +112 -0
- package/bundled-skills/setup-matt-pocock-skills/SKILL.md +158 -0
- package/bundled-skills/setup-matt-pocock-skills/domain.md +51 -0
- package/bundled-skills/setup-matt-pocock-skills/issue-tracker-github.md +34 -0
- package/bundled-skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +35 -0
- package/bundled-skills/setup-matt-pocock-skills/issue-tracker-local.md +19 -0
- package/bundled-skills/setup-matt-pocock-skills/triage-labels.md +15 -0
- package/bundled-skills/survey-generator/LICENSE +21 -0
- package/bundled-skills/survey-generator/SKILL.md +143 -0
- package/bundled-skills/survey-generator/build_artifact.py +208 -0
- package/bundled-skills/survey-generator/examples/agentic-engineering/research_bundle.json +1196 -0
- package/bundled-skills/survey-generator/examples/agentic-engineering/survey.html +706 -0
- package/bundled-skills/survey-generator/style_spec.json +85 -0
- package/bundled-skills/survey-generator/templates/research_bundle_template.json +69 -0
- package/bundled-skills/tdd/SKILL.md +139 -0
- package/bundled-skills/tdd/mocking.md +59 -0
- package/bundled-skills/tdd/refactoring.md +10 -0
- package/bundled-skills/tdd/tests.md +61 -0
- package/bundled-skills/teach/GLOSSARY-FORMAT.md +35 -0
- package/bundled-skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/bundled-skills/teach/MISSION-FORMAT.md +31 -0
- package/bundled-skills/teach/RESOURCES-FORMAT.md +32 -0
- package/bundled-skills/teach/SKILL.md +169 -0
- package/bundled-skills/to-issues/SKILL.md +115 -0
- package/bundled-skills/to-prd/SKILL.md +104 -0
- package/bundled-skills/tools-page-seo-optimizer/SKILL.md +616 -0
- package/bundled-skills/triage/AGENT-BRIEF.md +207 -0
- package/bundled-skills/triage/OUT-OF-SCOPE.md +105 -0
- package/bundled-skills/triage/SKILL.md +143 -0
- package/bundled-skills/vibecode-production-qa-validator/SKILL.md +371 -141
- package/bundled-skills/wiki-builder/SKILL.md +157 -0
- package/bundled-skills/wiki-builder/agents/openai.yaml +5 -0
- package/bundled-skills/wiki-builder/references/wiki-flavors.md +98 -0
- package/bundled-skills/wiki-builder/scripts/init_wiki.sh +105 -0
- package/bundled-skills/wiki-builder/templates/index.md +20 -0
- package/bundled-skills/wiki-builder/templates/maintenance-log.md +7 -0
- package/bundled-skills/wiki-builder/templates/prompts/compile-concept-page.md +12 -0
- package/bundled-skills/wiki-builder/templates/prompts/compile-index.md +11 -0
- package/bundled-skills/wiki-builder/templates/prompts/compile-source-page.md +12 -0
- package/bundled-skills/wiki-builder/templates/prompts/lint-wiki.md +10 -0
- package/bundled-skills/wiki-builder/templates/prompts/query-and-file.md +11 -0
- package/bundled-skills/wiki-builder/templates/sources.md +9 -0
- package/bundled-skills/wiki-builder/templates/wiki.config.md +53 -0
- package/bundled-skills/writing-great-skills/GLOSSARY.md +181 -0
- package/bundled-skills/writing-great-skills/SKILL.md +111 -0
- package/bundled-skills/yao-meta-skill/SKILL.md +86 -0
- package/bundled-skills/yao-meta-skill/agents/interface.yaml +26 -0
- package/bundled-skills/yao-meta-skill/manifest.json +24 -0
- package/bundled-skills/yao-meta-skill/references/artifact-design-doctrine.md +49 -0
- package/bundled-skills/yao-meta-skill/references/authoring-discipline.md +78 -0
- package/bundled-skills/yao-meta-skill/references/autonomous-adaptation.md +65 -0
- package/bundled-skills/yao-meta-skill/references/distribution-registry-method.md +60 -0
- package/bundled-skills/yao-meta-skill/references/eval-playbook.md +69 -0
- package/bundled-skills/yao-meta-skill/references/gate-selection.md +68 -0
- package/bundled-skills/yao-meta-skill/references/governance.md +134 -0
- package/bundled-skills/yao-meta-skill/references/human-review-template.md +54 -0
- package/bundled-skills/yao-meta-skill/references/intent-dialogue.md +138 -0
- package/bundled-skills/yao-meta-skill/references/iteration-philosophy.md +30 -0
- package/bundled-skills/yao-meta-skill/references/non-skill-decision-tree.md +39 -0
- package/bundled-skills/yao-meta-skill/references/operating-modes.md +107 -0
- package/bundled-skills/yao-meta-skill/references/output-eval-method.md +113 -0
- package/bundled-skills/yao-meta-skill/references/output-quality-risk.md +41 -0
- package/bundled-skills/yao-meta-skill/references/output-visual-quality.md +53 -0
- package/bundled-skills/yao-meta-skill/references/packaging-contracts.md +70 -0
- package/bundled-skills/yao-meta-skill/references/pattern-extraction-doctrine.md +76 -0
- package/bundled-skills/yao-meta-skill/references/platform-capability-matrix.md +49 -0
- package/bundled-skills/yao-meta-skill/references/prompt-engineering-doctrine.md +76 -0
- package/bundled-skills/yao-meta-skill/references/qa-ladder.md +57 -0
- package/bundled-skills/yao-meta-skill/references/reference-scan.md +126 -0
- package/bundled-skills/yao-meta-skill/references/regression-cause-taxonomy.md +80 -0
- package/bundled-skills/yao-meta-skill/references/resource-boundaries.md +120 -0
- package/bundled-skills/yao-meta-skill/references/review-studio-method.md +87 -0
- package/bundled-skills/yao-meta-skill/references/review-waiver-method.md +76 -0
- package/bundled-skills/yao-meta-skill/references/runtime-conformance-method.md +21 -0
- package/bundled-skills/yao-meta-skill/references/skill-archetypes.md +86 -0
- package/bundled-skills/yao-meta-skill/references/skill-atlas-method.md +35 -0
- package/bundled-skills/yao-meta-skill/references/skill-engineering-method.md +210 -0
- package/bundled-skills/yao-meta-skill/references/skill-ir-method.md +41 -0
- package/bundled-skills/yao-meta-skill/references/skillops-decision-policy.md +53 -0
- package/bundled-skills/yao-meta-skill/references/systems-thinking-doctrine.md +75 -0
- package/bundled-skills/yao-meta-skill/references/telemetry-drift-method.md +182 -0
- package/bundled-skills/yao-meta-skill/references/trust-security-method.md +79 -0
- package/bundled-skills/yao-meta-skill/references/user-memory-policy.md +35 -0
- package/bundled-skills/youtube-notetaker/SKILL.md +209 -0
- package/bundled-skills/youtube-notetaker/reference/artifact.html +269 -0
- package/bundled-skills/youtube-notetaker/scripts/contact_sheet.py +53 -0
- package/bundled-skills/youtube-notetaker/scripts/detect_slides.sh +19 -0
- package/bundled-skills/youtube-notetaker/scripts/download.sh +24 -0
- package/bundled-skills/youtube-notetaker/scripts/extract_slides.py +43 -0
- package/bundled-skills/youtube-notetaker/scripts/serve.py +173 -0
- package/bundled-skills/youtube-notetaker/scripts/setup.sh +27 -0
- package/bundled-skills/youtube-notetaker/scripts/verify.sh +31 -0
- package/bundled-skills/youtube-notetaker/scripts/vtt_to_transcript.py +59 -0
- package/bundled-skills/youtube-notetaker/scripts/write_library_item.py +69 -0
- package/package.json +1 -1
- package/skills_index.json +1956 -286
- package/bundled-skills/ai-md/SKILL.md +0 -523
- package/bundled-skills/atlas-contract/SKILL.md +0 -650
- package/bundled-skills/busybox-on-windows/SKILL.md +0 -40
- package/bundled-skills/monte-carlo-prevent/SKILL.md +0 -257
- package/bundled-skills/monte-carlo-prevent/references/TROUBLESHOOTING.md +0 -23
- package/bundled-skills/monte-carlo-prevent/references/parameters.md +0 -32
- package/bundled-skills/monte-carlo-prevent/references/workflows.md +0 -478
- package/bundled-skills/monte-carlo-push-ingestion/SKILL.md +0 -372
- package/bundled-skills/monte-carlo-push-ingestion/references/anomaly-detection.md +0 -87
- package/bundled-skills/monte-carlo-push-ingestion/references/custom-lineage.md +0 -203
- package/bundled-skills/monte-carlo-push-ingestion/references/direct-http-api.md +0 -207
- package/bundled-skills/monte-carlo-push-ingestion/references/prerequisites.md +0 -150
- package/bundled-skills/monte-carlo-push-ingestion/references/push-lineage.md +0 -160
- package/bundled-skills/monte-carlo-push-ingestion/references/push-metadata.md +0 -158
- package/bundled-skills/monte-carlo-push-ingestion/references/push-query-logs.md +0 -219
- package/bundled-skills/monte-carlo-push-ingestion/references/validation.md +0 -257
- package/bundled-skills/monte-carlo-push-ingestion/scripts/sample_verify.py +0 -357
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_lineage.py +0 -70
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_metadata.py +0 -65
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_query_logs.py +0 -70
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_lineage.py +0 -214
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_metadata.py +0 -160
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_query_logs.py +0 -164
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_lineage.py +0 -198
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_metadata.py +0 -193
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_query_logs.py +0 -207
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_and_push_metadata.py +0 -71
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_and_push_query_logs.py +0 -64
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_metadata.py +0 -253
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_query_logs.py +0 -149
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/push_metadata.py +0 -190
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/push_query_logs.py +0 -208
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_lineage.py +0 -83
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_metadata.py +0 -77
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_query_logs.py +0 -83
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_lineage.py +0 -240
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_metadata.py +0 -212
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_query_logs.py +0 -204
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_lineage.py +0 -192
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_metadata.py +0 -178
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_query_logs.py +0 -200
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_lineage.py +0 -119
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_metadata.py +0 -119
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_query_logs.py +0 -117
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_lineage.py +0 -265
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_metadata.py +0 -313
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_query_logs.py +0 -284
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_lineage.py +0 -309
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_metadata.py +0 -245
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_query_logs.py +0 -255
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_lineage.py +0 -78
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_metadata.py +0 -80
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_query_logs.py +0 -88
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_lineage.py +0 -235
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_metadata.py +0 -219
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_query_logs.py +0 -239
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_lineage.py +0 -178
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_metadata.py +0 -178
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_query_logs.py +0 -196
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_lineage.py +0 -154
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_metadata.py +0 -137
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_query_logs.py +0 -137
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_lineage.py +0 -349
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_metadata.py +0 -329
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_query_logs.py +0 -254
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_lineage.py +0 -307
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_metadata.py +0 -228
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_query_logs.py +0 -248
- package/bundled-skills/monte-carlo-push-ingestion/scripts/test_template_sdk_usage.py +0 -340
- package/bundled-skills/skill-optimizer/SKILL.md +0 -271
- package/bundled-skills/using-superpowers/SKILL.md +0 -98
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: brutalism
|
|
3
|
+
description: Web and App implementation guide for Brutalism. Trigger when user wants a raw appearance, intentionally unfinished look, and rejection of standard design conventions.
|
|
4
|
+
date_added: "2026-06-17"
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Brutalism
|
|
11
|
+
|
|
12
|
+
> "Raw materials exposed. An intentional rejection of polish, gradients, and soft shadows."
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
Use this sub-style when the user's request matches the aesthetic described above. This is a child reference of the `design-it` skill and is not meant to be triggered directly.
|
|
17
|
+
|
|
18
|
+
## Core Principles
|
|
19
|
+
1. **Unstyled Components**: Default browser styling for buttons, inputs, and links is celebrated.
|
|
20
|
+
2. **Exposed Structure**: Grid lines, tables with visible borders, and stark boundaries are used instead of whitespace to separate content.
|
|
21
|
+
3. **Anti-Aesthetic**: Intentional awkwardness. Elements might slightly overlap in a way that feels broken, or use system default fonts.
|
|
22
|
+
|
|
23
|
+
## Visual DNA
|
|
24
|
+
- **Colors**: High contrast, often clashing. Pure `#0000FF` blue for links, `#FF0000` red for accents, on stark white or `#C0C0C0` grey backgrounds. **Industrial Chic** palette fits best.
|
|
25
|
+
- **Typography**: Courier New, Times New Roman, Comic Sans, or default sans-serifs. No web fonts.
|
|
26
|
+
- **Visuals**: Dithered images, pixelated graphics, or heavily compressed jpegs.
|
|
27
|
+
|
|
28
|
+
## Web Implementation
|
|
29
|
+
- Use standard HTML tags without overriding their default appearance whenever possible.
|
|
30
|
+
- **CSS Example**:
|
|
31
|
+
```css
|
|
32
|
+
body {
|
|
33
|
+
background-color: #ffffff;
|
|
34
|
+
color: #000000;
|
|
35
|
+
font-family: monospace;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* Expose the structure */
|
|
39
|
+
.brutalist-container {
|
|
40
|
+
border: 1px solid #000;
|
|
41
|
+
padding: 10px;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.brutalist-section {
|
|
45
|
+
border-bottom: 2px dashed #000;
|
|
46
|
+
margin-bottom: 20px;
|
|
47
|
+
padding-bottom: 20px;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* Default-looking button but massive */
|
|
51
|
+
.brutalist-btn {
|
|
52
|
+
background-color: #c0c0c0;
|
|
53
|
+
border: 2px outset #ffffff;
|
|
54
|
+
border-right-color: #000000;
|
|
55
|
+
border-bottom-color: #000000;
|
|
56
|
+
color: #000000;
|
|
57
|
+
font-family: sans-serif;
|
|
58
|
+
font-size: 24px;
|
|
59
|
+
padding: 10px 20px;
|
|
60
|
+
cursor: pointer;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.brutalist-btn:active {
|
|
64
|
+
border-style: inset;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* System link blue */
|
|
68
|
+
a {
|
|
69
|
+
color: #0000FF;
|
|
70
|
+
text-decoration: underline;
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## App Implementation
|
|
75
|
+
|
|
76
|
+
### SwiftUI
|
|
77
|
+
```swift
|
|
78
|
+
struct BrutalistView: View {
|
|
79
|
+
var body: some View {
|
|
80
|
+
VStack(alignment: .leading, spacing: 0) {
|
|
81
|
+
Text("BRUTALISM")
|
|
82
|
+
.font(.custom("Courier New", size: 32))
|
|
83
|
+
.foregroundColor(.black)
|
|
84
|
+
.padding(10)
|
|
85
|
+
.border(Color.black, width: 2)
|
|
86
|
+
|
|
87
|
+
Divider().background(Color.black).padding(.vertical, 20)
|
|
88
|
+
|
|
89
|
+
Button(action: {}) {
|
|
90
|
+
Text("CLICK_HERE")
|
|
91
|
+
.font(.custom("Courier New", size: 24))
|
|
92
|
+
.foregroundColor(.blue)
|
|
93
|
+
.underline()
|
|
94
|
+
}
|
|
95
|
+
.padding(10)
|
|
96
|
+
|
|
97
|
+
// Raw structural container
|
|
98
|
+
VStack(alignment: .leading) {
|
|
99
|
+
Text("System Status: RAW").font(.custom("Courier New", size: 14))
|
|
100
|
+
}
|
|
101
|
+
.padding()
|
|
102
|
+
.border(Color.black, width: 1)
|
|
103
|
+
}
|
|
104
|
+
.padding()
|
|
105
|
+
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
|
|
106
|
+
.background(Color.white)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
- Avoid all native `ButtonStyle` components. Use `Text` with `.underline()` mapped to system blue.
|
|
111
|
+
- Use `.border(Color.black, width: 1)` instead of backgrounds or shadows.
|
|
112
|
+
- Force monospace fonts like Courier New or Menlo.
|
|
113
|
+
|
|
114
|
+
### Flutter
|
|
115
|
+
```dart
|
|
116
|
+
class BrutalistScreen extends StatelessWidget {
|
|
117
|
+
@override
|
|
118
|
+
Widget build(BuildContext context) {
|
|
119
|
+
// DO NOT use MaterialApp theme or Scaffold if possible,
|
|
120
|
+
// or strip them down completely.
|
|
121
|
+
return Scaffold(
|
|
122
|
+
backgroundColor: Colors.white,
|
|
123
|
+
body: SafeArea(
|
|
124
|
+
child: Padding(
|
|
125
|
+
padding: const EdgeInsets.all(16.0),
|
|
126
|
+
child: Column(
|
|
127
|
+
crossAxisAlignment: CrossAxisAlignment.start,
|
|
128
|
+
children: [
|
|
129
|
+
Container(
|
|
130
|
+
padding: const EdgeInsets.all(8),
|
|
131
|
+
decoration: BoxDecoration(
|
|
132
|
+
border: Border.all(color: Colors.black, width: 2),
|
|
133
|
+
),
|
|
134
|
+
child: const Text(
|
|
135
|
+
'BRUTALISM',
|
|
136
|
+
style: TextStyle(
|
|
137
|
+
fontFamily: 'Courier',
|
|
138
|
+
fontSize: 32,
|
|
139
|
+
color: Colors.black,
|
|
140
|
+
),
|
|
141
|
+
),
|
|
142
|
+
),
|
|
143
|
+
const Padding(
|
|
144
|
+
padding: EdgeInsets.symmetric(vertical: 20),
|
|
145
|
+
child: Divider(color: Colors.black, thickness: 2),
|
|
146
|
+
),
|
|
147
|
+
GestureDetector(
|
|
148
|
+
onTap: () {},
|
|
149
|
+
child: const Text(
|
|
150
|
+
'CLICK_HERE',
|
|
151
|
+
style: TextStyle(
|
|
152
|
+
fontFamily: 'Courier',
|
|
153
|
+
fontSize: 24,
|
|
154
|
+
color: Colors.blue,
|
|
155
|
+
decoration: TextDecoration.underline,
|
|
156
|
+
),
|
|
157
|
+
),
|
|
158
|
+
),
|
|
159
|
+
],
|
|
160
|
+
),
|
|
161
|
+
),
|
|
162
|
+
),
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
- Avoid `ElevatedButton`, `Card`, or `AppBar`.
|
|
168
|
+
- Build UI out of raw `Container`s with `Border.all(color: Colors.black)` and `Text` widgets.
|
|
169
|
+
- Use `TextDecoration.underline` to indicate interactivity.
|
|
170
|
+
|
|
171
|
+
### React Native
|
|
172
|
+
```jsx
|
|
173
|
+
const BrutalistScreen = () => {
|
|
174
|
+
return (
|
|
175
|
+
<View style={{ flex: 1, backgroundColor: '#FFFFFF', padding: 16 }}>
|
|
176
|
+
<View style={{
|
|
177
|
+
borderWidth: 2,
|
|
178
|
+
borderColor: '#000000',
|
|
179
|
+
padding: 10,
|
|
180
|
+
alignSelf: 'flex-start'
|
|
181
|
+
}}>
|
|
182
|
+
<Text style={{ fontFamily: 'monospace', fontSize: 32, color: '#000' }}>
|
|
183
|
+
BRUTALISM
|
|
184
|
+
</Text>
|
|
185
|
+
</View>
|
|
186
|
+
|
|
187
|
+
<View style={{ height: 2, backgroundColor: '#000', marginVertical: 20 }} />
|
|
188
|
+
|
|
189
|
+
<TouchableOpacity activeOpacity={1}>
|
|
190
|
+
<Text style={{
|
|
191
|
+
fontFamily: 'monospace',
|
|
192
|
+
fontSize: 24,
|
|
193
|
+
color: '#0000FF',
|
|
194
|
+
textDecorationLine: 'underline'
|
|
195
|
+
}}>
|
|
196
|
+
CLICK_HERE
|
|
197
|
+
</Text>
|
|
198
|
+
</TouchableOpacity>
|
|
199
|
+
|
|
200
|
+
<View style={{
|
|
201
|
+
borderWidth: 1,
|
|
202
|
+
borderColor: '#000',
|
|
203
|
+
padding: 16,
|
|
204
|
+
marginTop: 40
|
|
205
|
+
}}>
|
|
206
|
+
<Text style={{ fontFamily: 'monospace', color: '#000' }}>
|
|
207
|
+
System Status: RAW
|
|
208
|
+
</Text>
|
|
209
|
+
</View>
|
|
210
|
+
</View>
|
|
211
|
+
);
|
|
212
|
+
};
|
|
213
|
+
```
|
|
214
|
+
- Strip away all native feel. Do not use `react-native-elements` or `react-native-paper`.
|
|
215
|
+
- Set `activeOpacity={1}` on `TouchableOpacity` so there is no smooth fade — it should just click instantly.
|
|
216
|
+
- Use pure hex colors: `#FFFFFF`, `#000000`, `#0000FF`.
|
|
217
|
+
|
|
218
|
+
### Jetpack Compose
|
|
219
|
+
```kotlin
|
|
220
|
+
@Composable
|
|
221
|
+
fun BrutalistScreen() {
|
|
222
|
+
Column(
|
|
223
|
+
modifier = Modifier
|
|
224
|
+
.fillMaxSize()
|
|
225
|
+
.background(Color.White)
|
|
226
|
+
.padding(16.dp)
|
|
227
|
+
) {
|
|
228
|
+
Box(
|
|
229
|
+
modifier = Modifier
|
|
230
|
+
.border(2.dp, Color.Black)
|
|
231
|
+
.padding(10.dp)
|
|
232
|
+
) {
|
|
233
|
+
BasicText(
|
|
234
|
+
text = "BRUTALISM",
|
|
235
|
+
style = TextStyle(
|
|
236
|
+
fontFamily = FontFamily.Monospace,
|
|
237
|
+
fontSize = 32.sp,
|
|
238
|
+
color = Color.Black
|
|
239
|
+
)
|
|
240
|
+
)
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
Spacer(Modifier.height(20.dp))
|
|
244
|
+
Box(modifier = Modifier.fillMaxWidth().height(2.dp).background(Color.Black))
|
|
245
|
+
Spacer(Modifier.height(20.dp))
|
|
246
|
+
|
|
247
|
+
BasicText(
|
|
248
|
+
text = "CLICK_HERE",
|
|
249
|
+
modifier = Modifier.clickable { },
|
|
250
|
+
style = TextStyle(
|
|
251
|
+
fontFamily = FontFamily.Monospace,
|
|
252
|
+
fontSize = 24.sp,
|
|
253
|
+
color = Color.Blue,
|
|
254
|
+
textDecoration = TextDecoration.Underline
|
|
255
|
+
)
|
|
256
|
+
)
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
- Use `BasicText` instead of `Text` to bypass Material theme defaults.
|
|
261
|
+
- Build structural lines using `Box` with `.background(Color.Black)`.
|
|
262
|
+
- **Do not** use `Button` or `Card` or any Material composables. Raw layouts only.
|
|
263
|
+
|
|
264
|
+
## Do's and Don'ts
|
|
265
|
+
- **DO**: Use harsh, high-contrast borders (1px solid black) around everything.
|
|
266
|
+
- **DON'T**: Use border-radius, drop shadows, or smooth transitions. If it animates, it should pop instantly (0s transition).
|
|
267
|
+
|
|
268
|
+
## Limitations
|
|
269
|
+
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
|
|
270
|
+
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: brutalist-typography
|
|
3
|
+
description: Web and App implementation guide for Brutalist Typography. Trigger when user wants huge fonts, raw presentation, and aggressive layout decisions.
|
|
4
|
+
date_added: "2026-06-17"
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Brutalist Typography
|
|
11
|
+
|
|
12
|
+
> "Aggressive, unpolished, and unapologetic. Text that demands attention by breaking the rules."
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
Use this sub-style when the user's request matches the aesthetic described above. This is a child reference of the `design-it` skill and is not meant to be triggered directly.
|
|
17
|
+
|
|
18
|
+
## Core Principles
|
|
19
|
+
1. **Rule Breaking**: Text that overlaps, ignores margins, or deliberately clips off the edge of the screen.
|
|
20
|
+
2. **Anti-Design**: Intentional use of system fonts or "ugly" fonts (Times New Roman, Courier) in massive sizes.
|
|
21
|
+
3. **Harsh Contrast**: Clashing colors or stark monochrome.
|
|
22
|
+
|
|
23
|
+
## Visual DNA
|
|
24
|
+
- **Colors**: **Industrial Chic** (Black, White, Red) or aggressive neon clashing (e.g., pure blue on pure red).
|
|
25
|
+
- **Typography**: System default fonts (`Times New Roman`, `Arial`, `Courier New`) blown up to 150px.
|
|
26
|
+
- **Styling**: Marquees, blinking text, underlines that cut through descenders.
|
|
27
|
+
|
|
28
|
+
## Web Implementation
|
|
29
|
+
- Break the grid. Use absolute positioning or negative margins.
|
|
30
|
+
- **CSS Example**:
|
|
31
|
+
```css
|
|
32
|
+
body {
|
|
33
|
+
background-color: #fff;
|
|
34
|
+
color: #000;
|
|
35
|
+
font-family: 'Times New Roman', serif;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.brutalist-headline {
|
|
39
|
+
font-size: 15vw;
|
|
40
|
+
line-height: 0.7;
|
|
41
|
+
letter-spacing: -5px;
|
|
42
|
+
margin-left: -10px; /* Bleeds off screen intentionally */
|
|
43
|
+
word-wrap: break-word; /* Let words break awkwardly */
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.brutalist-highlight {
|
|
47
|
+
background-color: #ff0000;
|
|
48
|
+
color: #fff;
|
|
49
|
+
padding: 0 10px;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.marquee-container {
|
|
53
|
+
border-top: 5px solid #000;
|
|
54
|
+
border-bottom: 5px solid #000;
|
|
55
|
+
overflow: hidden;
|
|
56
|
+
white-space: nowrap;
|
|
57
|
+
font-family: 'Courier New', monospace;
|
|
58
|
+
font-size: 2rem;
|
|
59
|
+
font-weight: bold;
|
|
60
|
+
padding: 10px 0;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* A nod to early 90s web */
|
|
64
|
+
.brutalist-link {
|
|
65
|
+
color: #0000ee;
|
|
66
|
+
text-decoration: underline;
|
|
67
|
+
text-transform: uppercase;
|
|
68
|
+
}
|
|
69
|
+
.brutalist-link:hover {
|
|
70
|
+
background-color: #0000ee;
|
|
71
|
+
color: #fff;
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## App Implementation
|
|
76
|
+
|
|
77
|
+
### SwiftUI
|
|
78
|
+
```swift
|
|
79
|
+
struct BrutalistTypeView: View {
|
|
80
|
+
var body: some View {
|
|
81
|
+
ScrollView {
|
|
82
|
+
VStack(alignment: .leading, spacing: -20) {
|
|
83
|
+
// Bleeds off the edge intentionally
|
|
84
|
+
Text("BREAK")
|
|
85
|
+
.font(.custom("Times New Roman", size: 120))
|
|
86
|
+
.padding(.leading, -20)
|
|
87
|
+
|
|
88
|
+
Text("THE")
|
|
89
|
+
.font(.custom("Arial", size: 140))
|
|
90
|
+
.fontWeight(.black)
|
|
91
|
+
.foregroundColor(.clear)
|
|
92
|
+
.overlay(
|
|
93
|
+
Text("THE").stroke(Color.red, lineWidth: 3)
|
|
94
|
+
)
|
|
95
|
+
.offset(x: 40)
|
|
96
|
+
|
|
97
|
+
Text("GRID.")
|
|
98
|
+
.font(.custom("Courier New", size: 100))
|
|
99
|
+
.background(Color.blue)
|
|
100
|
+
.foregroundColor(.white)
|
|
101
|
+
.rotationEffect(.degrees(-5))
|
|
102
|
+
.offset(y: -40)
|
|
103
|
+
}
|
|
104
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
105
|
+
.padding(.top, 50)
|
|
106
|
+
}
|
|
107
|
+
.ignoresSafeArea() // Critical for Brutalist type
|
|
108
|
+
.background(Color.white)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
- `.ignoresSafeArea()` is mandatory. Text must be allowed to clip into the notch and status bar.
|
|
113
|
+
- Use negative `spacing` in `VStack` or explicit negative `.offset()` to force text elements to overlap each other aggressively.
|
|
114
|
+
- Outline text is achieved by setting `.foregroundColor(.clear)` and overlaying a `.stroke()`.
|
|
115
|
+
|
|
116
|
+
### Flutter
|
|
117
|
+
```dart
|
|
118
|
+
class BrutalistTypeScreen extends StatelessWidget {
|
|
119
|
+
@override
|
|
120
|
+
Widget build(BuildContext context) {
|
|
121
|
+
// Scaffold without SafeArea
|
|
122
|
+
return Scaffold(
|
|
123
|
+
backgroundColor: Colors.white,
|
|
124
|
+
body: Stack(
|
|
125
|
+
children: [
|
|
126
|
+
Positioned(
|
|
127
|
+
top: -20,
|
|
128
|
+
left: -20,
|
|
129
|
+
child: const Text(
|
|
130
|
+
'BREAK',
|
|
131
|
+
style: TextStyle(
|
|
132
|
+
fontFamily: 'Times New Roman',
|
|
133
|
+
fontSize: 150,
|
|
134
|
+
height: 0.8, // Negative line-spacing
|
|
135
|
+
color: Colors.black,
|
|
136
|
+
),
|
|
137
|
+
),
|
|
138
|
+
),
|
|
139
|
+
Positioned(
|
|
140
|
+
top: 100,
|
|
141
|
+
left: 40,
|
|
142
|
+
child: Text(
|
|
143
|
+
'THE',
|
|
144
|
+
style: TextStyle(
|
|
145
|
+
fontFamily: 'Arial',
|
|
146
|
+
fontSize: 140,
|
|
147
|
+
fontWeight: FontWeight.w900,
|
|
148
|
+
foreground: Paint()
|
|
149
|
+
..style = PaintingStyle.stroke
|
|
150
|
+
..strokeWidth = 3
|
|
151
|
+
..color = Colors.red,
|
|
152
|
+
),
|
|
153
|
+
),
|
|
154
|
+
),
|
|
155
|
+
Positioned(
|
|
156
|
+
top: 220,
|
|
157
|
+
left: 10,
|
|
158
|
+
child: Transform.rotate(
|
|
159
|
+
angle: -0.1,
|
|
160
|
+
child: Container(
|
|
161
|
+
color: Colors.blue,
|
|
162
|
+
child: const Text(
|
|
163
|
+
'GRID.',
|
|
164
|
+
style: TextStyle(
|
|
165
|
+
fontFamily: 'Courier',
|
|
166
|
+
fontSize: 120,
|
|
167
|
+
color: Colors.white,
|
|
168
|
+
),
|
|
169
|
+
),
|
|
170
|
+
),
|
|
171
|
+
),
|
|
172
|
+
),
|
|
173
|
+
],
|
|
174
|
+
),
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
- Do not use `SafeArea`.
|
|
180
|
+
- Absolute positioning via `Stack` and `Positioned` is the easiest way to break the grid and force overlaps.
|
|
181
|
+
- Use `height: 0.8` (or less than 1.0) in `TextStyle` to smash lines of text together.
|
|
182
|
+
|
|
183
|
+
### React Native
|
|
184
|
+
```jsx
|
|
185
|
+
const BrutalistTypeScreen = () => {
|
|
186
|
+
return (
|
|
187
|
+
<View style={{ flex: 1, backgroundColor: '#FFF' }}>
|
|
188
|
+
{/*
|
|
189
|
+
Note: React Native text clipping can be tricky on Android.
|
|
190
|
+
Ensure parent views don't have overflow: 'hidden'.
|
|
191
|
+
*/}
|
|
192
|
+
<Text style={{
|
|
193
|
+
fontFamily: 'Times New Roman',
|
|
194
|
+
fontSize: 130,
|
|
195
|
+
lineHeight: 110,
|
|
196
|
+
color: '#000',
|
|
197
|
+
marginLeft: -15, // Bleed off edge
|
|
198
|
+
marginTop: 40
|
|
199
|
+
}}>
|
|
200
|
+
BREAK
|
|
201
|
+
</Text>
|
|
202
|
+
|
|
203
|
+
<Text style={{
|
|
204
|
+
fontFamily: 'Arial',
|
|
205
|
+
fontSize: 140,
|
|
206
|
+
fontWeight: '900',
|
|
207
|
+
color: 'transparent',
|
|
208
|
+
textShadowColor: '#FF0000',
|
|
209
|
+
textShadowRadius: 1, // Fake stroke effect
|
|
210
|
+
marginLeft: 40,
|
|
211
|
+
marginTop: -30 // Overlap previous text
|
|
212
|
+
}}>
|
|
213
|
+
THE
|
|
214
|
+
</Text>
|
|
215
|
+
|
|
216
|
+
<Text style={{
|
|
217
|
+
fontFamily: 'monospace',
|
|
218
|
+
fontSize: 100,
|
|
219
|
+
backgroundColor: '#0000FF',
|
|
220
|
+
color: '#FFF',
|
|
221
|
+
transform: [{ rotate: '-5deg' }],
|
|
222
|
+
marginTop: -20,
|
|
223
|
+
alignSelf: 'flex-start'
|
|
224
|
+
}}>
|
|
225
|
+
GRID.
|
|
226
|
+
</Text>
|
|
227
|
+
</View>
|
|
228
|
+
);
|
|
229
|
+
};
|
|
230
|
+
```
|
|
231
|
+
- React Native doesn't have a native text-stroke property, so you either simulate it with text shadows or use `@shopify/react-native-skia` for true stroked text.
|
|
232
|
+
- Use negative `marginTop` and `marginLeft` to force the layout chaos.
|
|
233
|
+
|
|
234
|
+
### Jetpack Compose
|
|
235
|
+
```kotlin
|
|
236
|
+
@Composable
|
|
237
|
+
fun BrutalistTypeScreen() {
|
|
238
|
+
// Use Box for absolute overlapping layouts
|
|
239
|
+
Box(
|
|
240
|
+
modifier = Modifier
|
|
241
|
+
.fillMaxSize()
|
|
242
|
+
.background(Color.White)
|
|
243
|
+
) {
|
|
244
|
+
Text(
|
|
245
|
+
text = "BREAK",
|
|
246
|
+
fontFamily = FontFamily.Serif, // Times New Roman equivalent
|
|
247
|
+
fontSize = 130.sp,
|
|
248
|
+
color = Color.Black,
|
|
249
|
+
lineHeight = 100.sp,
|
|
250
|
+
modifier = Modifier.offset(x = (-15).dp, y = (-20).dp)
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
Text(
|
|
254
|
+
text = "THE",
|
|
255
|
+
fontFamily = FontFamily.SansSerif,
|
|
256
|
+
fontSize = 140.sp,
|
|
257
|
+
fontWeight = FontWeight.Black,
|
|
258
|
+
style = TextStyle(
|
|
259
|
+
drawStyle = Stroke(width = 5f)
|
|
260
|
+
),
|
|
261
|
+
color = Color.Red,
|
|
262
|
+
modifier = Modifier.offset(x = 40.dp, y = 100.dp)
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
Text(
|
|
266
|
+
text = "GRID.",
|
|
267
|
+
fontFamily = FontFamily.Monospace,
|
|
268
|
+
fontSize = 100.sp,
|
|
269
|
+
color = Color.White,
|
|
270
|
+
modifier = Modifier
|
|
271
|
+
.offset(x = 10.dp, y = 220.dp)
|
|
272
|
+
.rotate(-5f)
|
|
273
|
+
.background(Color.Blue)
|
|
274
|
+
)
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
```
|
|
278
|
+
- A `Box` with explicit `Modifier.offset(x, y)` allows freeform overlapping placement, breaking away from standard `Column`/`Row` grids.
|
|
279
|
+
- Compose `TextStyle` supports `drawStyle = Stroke(width = 5f)`, making outline typography incredibly simple.
|
|
280
|
+
|
|
281
|
+
## Do's and Don'ts
|
|
282
|
+
- **DO**: Mix serif and monospace fonts aggressively.
|
|
283
|
+
- **DON'T**: Add drop shadows, gradients, or rounded corners. The design must look raw and unstyled.
|
|
284
|
+
|
|
285
|
+
## Limitations
|
|
286
|
+
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
|
|
287
|
+
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
|