mcpField
T
theme-design

theme-design

github.com/ahmed-lakoshaDesign & UI7660 installsUpdated 31w ago
Repository

About theme-design

theme-design is a workflow reference for translating Figma designs into Odoo website themes. It guides design analysis, matching built-in templates, configuring theme variables, and adding CSS or custom snippets where needed.

Key features

  1. 01Figma design analysis workflow
  2. 02Mapping colors to Odoo theme variables
  3. 03Header and footer template selection
  4. 04Shop and blog layout options
  5. 05Programmatic template activation

Use cases

  1. 01Planning an Odoo theme from a Figma design
  2. 02Selecting matching header and footer templates
  3. 03Configuring shop and blog pages
  4. 04Generating theme settings from extracted design details

MCP support

The reference describes using Figma MCP and Chrome MCP during the design extraction workflow. It does not describe implementing or exposing an MCP server.

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/ahmed-lakosha/odoo-plugins --skill theme-design

After installing, type/theme-designin Claude Code to confirm it loaded.

Details

From the project README

Figma-to-Odoo Design Workflow

Design Workflow Methodology

1. ANALYZE DESIGN → Extract colors, fonts, layout, components
2. COMPARE TO ODOO TEMPLATES → Match header, footer, page layouts
3. CHOOSE CLOSEST TEMPLATE → Select best matching built-in template
4. CONFIGURE VIA VARIABLES → Set $o-website-values-palettes
5. ENHANCE WITH CUSTOM CSS → Only what templates can't provide
6. CREATE CUSTOM SNIPPETS → Components not available in Odoo

Figma Extraction Pipeline

Using Figma MCP
1. Use Figma MCP with prompt:
   "Convert this Figma design to HTML for Odoo <version> website theme.
   Use Bootstrap v5.1.3 classes (not Tailwind).
   Apply proper Odoo theme structure with sections and containers."

2. Extract Color Palette:
   "Extract the color palette and map to o-color-1 through o-color-5."

3. Extract Typography:
   "Convert text styling to Bootstrap typography classes."
Using Chrome MCP (Browser Automation)
  1. Navigate to Figma URL → Open Pages (not components!)
  2. Click on page elements to extract:
    • Header/navbar → primary color
    • CTA buttons → secondary color
    • Section backgrounds → o-color-3
    • Body text → text color, font family
    • Headings (H1-H6) → heading fonts, sizes

Pages to check: Homepage, About/Services, Contact, Footer area

Color Mapping
Design ElementMaps To
Primary brand color (buttons, links)o-color-1
Accent/CTA coloro-color-2
Light section backgroundso-color-3
Main content backgroundo-color-4
Dark text / headingso-color-5

Header Templates (11 Primary + Variants)

XML IDNameBest For
website.template_header_defaultDefaultMost websites
website.template_header_hamburgerHamburgerMinimal designs
website.template_header_stretchStretchWide layouts
website.template_header_verticalVerticalApp-like sites
website.template_header_searchSearchE-commerce, directories
website.template_header_sales_oneSales 1Online stores
website.template_header_sales_twoSales 2Large catalogs
website.template_header_sales_threeSales 3Product-focused
website.template_header_sales_fourSales 4Fashion, retail
website.template_header_sidebarSidebarDashboard sites
website.template_header_boxedBoxedModern brands
Header Alignment Variants
  • ..._align_center / ..._align_right — Desktop alignment
  • ..._mobile_align_center / ..._mobile_align_right — Mobile alignment
Header Visibility (mutually exclusive)
XML IDEffect
website.header_visibility_standardScrolls with page
website.header_visibility_fixedSticks to top
website.header_visibility_disappearsHides on scroll down
website.header_visibility_fade_outFades out
Header Components (combinable)
XML IDComponentDefault
website.option_header_brand_logoLogo imageActive
website.option_header_brand_nameText nameInactive
website.header_call_to_actionCTA buttonActive
website.header_search_boxSearch barActive
website.header_social_linksSocial iconsInactive
Header Decision Flowchart
Is navigation hidden? → YES → template_header_hamburger
                       → NO → Vertical sidebar? → YES → Full page? → sidebar / vertical
                                                 → NO → E-commerce? → YES → Categories? → sales_two / sales_one
                                                                    → NO → Search prominent? → template_header_search
                                                                                             → Boxed? → boxed / stretch / default

Footer Templates (9 Options)

XML IDNameBest For
website.footer_customDefaultGeneral use
website.template_footer_descriptiveDescriptiveCorporate sites
website.template_footer_centeredCenteredLanding pages
website.template_footer_linksLinksLarge sites
website.template_footer_minimalistMinimalistClean designs
website.template_footer_contactContactService businesses
website.template_footer_call_to_actionCTAMarketing sites
website.template_footer_headlineHeadlineBrand statements
website.template_footer_slideoutSlideoutModern/trendy
Footer Decision Flowchart
Minimal (just copyright)? → YES → template_footer_minimalist
                          → NO → Center-aligned? → template_footer_centered
                                 Newsletter/CTA? → template_footer_call_to_action
                                 Contact info? → template_footer_contact
                                 Primarily links? → template_footer_links
                                 Detailed description? → template_footer_descriptive
                                 Default → footer_custom

Shop Page Templates (website_sale)

Layout Options
XML IDFeature
website_sale.products_design_cardCard layout
website_sale.products_design_gridGrid layout
website_sale.products_thumb_4_34:3 image ratio
website_sale.products_thumb_coverImage fills container (default)
Categories & Filters
XML IDFeatureDefault
website_sale.products_categoriesLeft sidebarInactive
website_sale.products_categories_topTop navActive
website_sale.products_attributesAttribute filtersActive
website_sale.filter_products_pricePrice filterInactive
website_sale.searchSearch boxActive
website_sale.sortSort dropdownActive
Product Detail Options
XML IDFeatureDefault
website_sale.product_commentReviewsInactive
website_sale.product_buy_nowBuy Now buttonInactive
website_sale.alternative_productsAlternativesActive

Blog Templates (website_blog)

Blog Listing
XML IDFeatureDefault
website_blog.opt_blog_cover_postFeatured bannerActive
website_blog.opt_blog_list_viewList viewInactive
website_blog.opt_blog_cards_designCard componentsInactive
website_blog.opt_blog_sidebar_showSidebarInactive
Blog Post Detail
XML IDFeatureDefault
website_blog.opt_blog_post_breadcrumbBreadcrumbsActive
website_blog.opt_blog_post_read_nextRead nextActive
website_blog.opt_blog_post_commentCommentsInactive

Cart & Checkout

XML IDFeatureDefault
website_sale.suggested_products_listSuggested productsActive
website_sale.reduction_codePromo codeActive
website_sale.accept_terms_and_conditionsT&C checkboxInactive

Generating Theme Configuration from Design

After analyzing the design and matching templates:

// primary_variables.scss — Generated from Design Analysis
$o-theme-font-configs: (
    'Poppins': (
        'family': ('Poppins', sans-serif),
        'url': 'Poppins:300,400,500,600,700',
    ),
);

$o-website-values-palettes: (
    (
        'color-palettes-name': 'default-1',
        'font': 'Poppins',
        'headings-font': 'Poppins',
        'header-template': 'hamburger',
        'header-links-style': 'pills',
        'logo-height': 48px,
        'footer-template': 'contact',
        'footer-scrolltop': true,
        'btn-padding-y': 0.75rem,
        'btn-border-radius': 8px,
        'link-underline': 'never',
    )
);

Then create theme.utils to activate the matched templates programmatically:

def _theme_yourtheme_post_copy(self, mod):
    self.enable_view('website.template_header_hamburger')
    self.enable_view('website.template_footer_contact')
    self.enable_view('website.option_header_brand_logo')
    self.disable_view('website.header_visibility_standard')
    self.enable_view('website.header_visibility_fixed')

Comments

Markdown supported