{"name":"Morten A. Giraffe","role":"Independent Web Designer","canonical_url":"https://www.mortenagiraffe.com","description":"Custom websites and digital product surfaces designed around a clear offer, real content, and a useful next step.","contact":{"email":"hello@mortenagiraffe.com","start_project_url":"https://www.mortenagiraffe.com/start-a-project","book_call_url":"https://www.mortenagiraffe.com/book-a-call","calendar_provider_url":"https://cal.com/mortenagiraffe/"},"story_url":"https://www.mortenagiraffe.com/story","about_url":"https://www.mortenagiraffe.com/about","ai_info_url":"https://www.mortenagiraffe.com/ai-info","trust_center_url":"https://www.mortenagiraffe.com/trust","resources":{"website_toolkit_url":"https://www.mortenagiraffe.com/tools","technical_seo_field_guide_url":"https://www.mortenagiraffe.com/journal/technical-seo-audit-guide","technical_seo_chapters":[{"check":1,"title":"Scope the Audit Before You Crawl Everything","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/scope-before-crawl"},{"check":2,"title":"Crawlability: Make Every Important Page Reachable","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/crawlability"},{"check":3,"title":"Indexation: Separate “Can Be Crawled” from “Should Be Indexed”","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/indexation"},{"check":4,"title":"Status Codes and Redirects: Make Every Response Tell the Truth","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/status-codes-and-redirects"},{"check":5,"title":"Canonicalization: Choose One URL and Make Every Signal Agree","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/canonicalization"},{"check":6,"title":"URL Parameters and Facets: Stop Infinite Crawl Spaces","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/url-parameters-and-facets"},{"check":7,"title":"XML Sitemaps: Publish an Honest List of Canonical URLs","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/xml-sitemaps"},{"check":8,"title":"Site Architecture: Put Important Pages Within Reach","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/site-architecture"},{"check":9,"title":"JavaScript Rendering: Put Meaning in the Initial Response","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/javascript-rendering"},{"check":10,"title":"Titles and Snippets: Give Every Search Result a Clear Promise","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/titles-and-snippets"},{"check":11,"title":"Structured Data: Describe What the Page Actually Contains","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/structured-data"},{"check":12,"title":"Media Discovery: Make Images and Video Findable, Fast, and Useful","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/media-discovery"},{"check":13,"title":"International SEO: Connect Each Language and Region Correctly","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/international-seo"},{"check":14,"title":"Core Web Vitals: Fix Repeating Causes, Not Isolated Scores","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/core-web-vitals"},{"check":15,"title":"Mobile and Accessibility: Preserve Meaning Under Real Constraints","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/mobile-and-accessibility"},{"check":16,"title":"Content Overlap: Distinguish Useful Coverage from Cannibalization","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/content-overlap"},{"check":17,"title":"AI Search Readiness: Make Claims Easy to Retrieve and Verify","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/ai-search-readiness"},{"check":18,"title":"Monitoring and Change Control: Keep Releases from Reopening Old Problems","url":"https://www.mortenagiraffe.com/journal/technical-seo-audits/monitoring-and-change-control"}],"journal_url":"https://www.mortenagiraffe.com/journal","ui_prompt_field_guide_url":"https://www.mortenagiraffe.com/journal/ui-prompt-library-for-vibe-coders","ui_prompt_pattern_page_count":108,"product_audit_field_guide_url":"https://www.mortenagiraffe.com/journal/vibe-coded-app-audit-guide","product_audit_chapters":[{"check":1,"title":"Scope the Audit Before You Touch the Product","url":"https://www.mortenagiraffe.com/journal/product-audits/scope-and-authority"},{"check":2,"title":"Prove Which Code and Environment You Are Actually Testing","url":"https://www.mortenagiraffe.com/journal/product-audits/repo-release-environment-identity"},{"check":3,"title":"Map the Product Before You Sample the Screens","url":"https://www.mortenagiraffe.com/journal/product-audits/product-map-screen-jobs"},{"check":4,"title":"Test Identity and Permission Boundaries, Not Just Login","url":"https://www.mortenagiraffe.com/journal/product-audits/auth-roles-permissions"},{"check":5,"title":"Prove That Saved Work Survives the Round Trip","url":"https://www.mortenagiraffe.com/journal/product-audits/data-persistence-migrations"},{"check":6,"title":"Separate Shipped, Draft, Disabled, Synthetic and Deferred Work","url":"https://www.mortenagiraffe.com/journal/product-audits/feature-state-completeness"},{"check":7,"title":"Audit the Distance From Arrival to First Useful Outcome","url":"https://www.mortenagiraffe.com/journal/product-audits/first-run-activation"},{"check":8,"title":"Trace the Work From Entry to Durable Outcome","url":"https://www.mortenagiraffe.com/journal/product-audits/critical-journeys"},{"check":9,"title":"Design and Test the States Between Success and Failure","url":"https://www.mortenagiraffe.com/journal/product-audits/states-feedback-recovery"},{"check":10,"title":"Preserve the Task When Space, Input and Context Change","url":"https://www.mortenagiraffe.com/journal/product-audits/accessibility-responsive-context"},{"check":11,"title":"Test the Boundaries Where Systems Disagree","url":"https://www.mortenagiraffe.com/journal/product-audits/api-integrations-contracts"},{"check":12,"title":"Make Failures Explainable Before They Become Mysteries","url":"https://www.mortenagiraffe.com/journal/product-audits/observability-incidents-support"},{"check":13,"title":"Find Query Problems With Workload Evidence, Not Guesswork","url":"https://www.mortenagiraffe.com/journal/product-audits/database-query-health"},{"check":14,"title":"Measure the Request Path Before Blaming the Network","url":"https://www.mortenagiraffe.com/journal/product-audits/network-caching-payloads"},{"check":15,"title":"Separate Slow Work From Retained Work","url":"https://www.mortenagiraffe.com/journal/product-audits/runtime-main-thread-memory"},{"check":16,"title":"Verify the Boundaries That Protect Real People and Data","url":"https://www.mortenagiraffe.com/journal/product-audits/security-privacy-isolation"},{"check":17,"title":"Separate Product Evidence From Startup Storytelling","url":"https://www.mortenagiraffe.com/journal/product-audits/commercial-assumptions-retention"},{"check":18,"title":"Finish the Audit Where the Next Release Begins","url":"https://www.mortenagiraffe.com/journal/product-audits/regression-release-change-control"}],"ui_ux_field_guide_url":"https://www.mortenagiraffe.com/journal/ui-ux-rules-that-make-websites-work","ui_ux_story_series_url":"https://www.mortenagiraffe.com/journal/ui-ux-rules-that-make-websites-work","ui_ux_story_pages":[{"rule":"01","title":"Purpose Before Polish: Give Every Page One Job","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/purpose-before-polish"},{"rule":"02","title":"Visual Hierarchy: Make the Decision Order Visible","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/visual-hierarchy"},{"rule":"03","title":"White Space Is a Relationship Tool","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/white-space"},{"rule":"04","title":"Contrast Should Explain What Is Different","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/contrast"},{"rule":"05","title":"Proximity: Make Relationships Visible","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/proximity"},{"rule":"06","title":"Consistency Turns Learning Into Speed","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/consistency"},{"rule":"07","title":"Familiarity: Do Not Hide Common Actions Behind Originality","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/familiarity"},{"rule":"08","title":"Fitts’s Law: Make Important Actions Easy to Reach","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/fitts-law"},{"rule":"09","title":"Hick’s Law: Structure Choice Without Hiding It","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/hicks-law"},{"rule":"10","title":"Chunking: Stop Making Visitors Remember the Interface","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/chunking"},{"rule":"11","title":"Progressive Disclosure: Reveal Complexity When It Becomes Useful","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/progressive-disclosure"},{"rule":"12","title":"Feedback and Speed: Every Action Needs an Answer","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/feedback-and-speed"},{"rule":"13","title":"Error Recovery: Protect the Work and the Way Forward","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/error-recovery"},{"rule":"14","title":"Accessibility Is Evidence the Interface Communicates","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/accessibility"},{"rule":"15","title":"Responsive Design Is the Same Purpose Under New Constraints","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/responsive-design"},{"rule":"16","title":"Serial Position: Use the Beginning and End Deliberately","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/serial-position"},{"rule":"17","title":"Trust Works Best Where Doubt Appears","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/trust-near-action"},{"rule":"18","title":"Measure the Outcome—not the Decoration","url":"https://www.mortenagiraffe.com/journal/ui-ux-rules/measure-what-matters"}]},"discovery":{"llms_txt_url":"https://www.mortenagiraffe.com/llms.txt","sitemap_url":"https://www.mortenagiraffe.com/sitemap.xml","robots_url":"https://www.mortenagiraffe.com/robots.txt"},"policy_urls":{"privacy":"https://www.mortenagiraffe.com/privacy","terms":"https://www.mortenagiraffe.com/terms","accessibility":"https://www.mortenagiraffe.com/accessibility"},"brand_assets":{"favicon_url":"https://www.mortenagiraffe.com/favicon.ico","app_icon_url":"https://www.mortenagiraffe.com/icon-512x512.png","apple_touch_icon_url":"https://www.mortenagiraffe.com/apple-icon.png","open_graph_image_url":"https://www.mortenagiraffe.com/og-image.png"},"social_profiles":["https://x.com/MortenAGiraffe","https://www.instagram.com/mortenagiraffe","https://open.spotify.com/user/1255255682?si=00228be8513945ff"],"services":["Website strategy","Web design","Responsive front-end development","Copy direction","Basic SEO","Performance-focused implementation","Design-system and launch support"],"portfolio":[{"name":"D&L Garage Doors","category":"Home-Service Platform","status":"Live platform","case_study_url":"https://www.mortenagiraffe.com/work/dl-garage-doors","public_url":"https://www.dlgaragedoors.com"},{"name":"GoalDNA","category":"Soccer Club Operating System","status":"Rolling out","case_study_url":"https://www.mortenagiraffe.com/work/goaldna","public_url":"https://get.goaldna.com"},{"name":"Chewb & SPAKOi","category":"Operator-Led Creative Studio","status":"Live","case_study_url":"https://www.mortenagiraffe.com/work/chewb-spakoi","public_url":"https://www.chewbspakoi.com"},{"name":"WeGotsAllKinds FC","category":"Youth Football Brand Concept","status":"Club vision","case_study_url":"https://www.mortenagiraffe.com/work/we-gots-all-kinds-fc"},{"name":"Paramount Junior Volleyball Academy","category":"Youth Sports Registration Experience","status":"Live","case_study_url":"https://www.mortenagiraffe.com/work/pjva"},{"name":"VARSELO","category":"Football Product Company","status":"Pre-launch brand experience","case_study_url":"https://www.mortenagiraffe.com/work/varselo","public_url":"https://www.varselo.com"}],"content_policy":{"testimonials":"Only approved testimonials are published.","awards_and_logos":"No awards or client logos are published without proof and permission.","metrics":"Numeric outcome claims require evidence, dates, and method notes.","automated_audits":"The public checklist is a guided self-audit; automated website crawling is not part of the current visitor flow."},"last_reviewed":"2026-10-02"}