metatroncubeswdev cf656377ef O9: align Admissions, Contact Us and Login with the homepage design, real Metatroncube logo/favicon, and a chain of placeholder-content leaks found underneath
Per discussion: the marketing homepage looked polished but the rest of
the public site (the admission form, contact us, the backend login
screen) was still bare stock Odoo, and the site nav still showed
stock Odoo's own default logo/favicon rather than Metatroncube's real
ones. This brings the same design system (Manrope + Work Sans, the
navy/indigo palette) to all three pages and wires up the two supplied
brand assets - static/img/logo.png (the wordmark, used as
website.logo, so it renders in every page's nav automatically) and
static/img/favicon.png (the cube mark, website.favicon). Loaded via a
post_init_hook (hooks.py) rather than a plain <record>: website's two
stock demo sites (website.default_website, website.website2) are both
noupdate=True, and Python is the tool that isn't gated by that the way
a <record>/<function> tag would be on an already-installed database
(see hooks.py's own docstring for the exact mechanism and its
fresh-install-only limitation).

Admissions keeps its exact form markup/field names/model untouched -
only the surrounding hero and "what happens next" strip are new, added
via position="before"/"after" around the existing <section> so the
stock s_website_form JS widget this page depends on is never touched.

Restyling contact us and the login screen surfaced a chain of real,
separate placeholder-content bugs, each found by looking at the next
page down rather than assuming the previous fix was complete:

1. website.contactus's sidebar hardcodes "My Company" and a fake US
   street address - shared/DEMO_SCRIPT.md explicitly bans placeholder
   content, and it had been live here the whole time. Reading
   res_company fields instead means it shows whichever school is
   actually active, same as the admission form's own live program list.
2. website.footer_custom - the footer on EVERY page, not just contact
   us - carries the identical yourcompany.example.com / +1
   555-555-5556 placeholder, plus a "Products/Services/Legal" link
   list to nowhere and dead social icons. Fixing #1 alone would have
   left this sitting directly underneath it on every single page.
3. website.header_text_element, the nav bar's own phone/email widget,
   carries the same fake number - a fourth, separate occurrence, this
   time in the header. First pass here fixed only its "phone_mail"
   variant, assumed (wrongly) to be what this site's header actually
   uses; the live page still showed the fake number afterward. It
   turned out both nav slots (desktop, mobile) use the plain default
   branch instead - caught only by re-checking the real page rather
   than trusting that assumption, and fixed every variant that carries
   contact info this time, not just the one guessed at.
4. Underneath all three page-level fixes: base.main_company itself
   still carried stock Odoo's own demo phone (+1 555-555-5556) and
   email (info@yourcompany.com) - the page-level fixes above only
   surfaced this because they read real company data for the first
   time; the data itself needed fixing too. Real Indian/Canadian
   contact details added to both demo companies in mc_theme_demo.xml.
5. web.login_layout hardcodes its own separate "Powered by Odoo" link
   - a third distinct occurrence, different from the portal sidebar
   text and the web.brand_promotion badge already fixed, reached by
   the very first screen anyone doing this demo sees.

Full suite (all 9 modules + web_responsive) re-verified together after
every fix in this chain: 0 failed, 0 error(s), tests up to 93.

One correction to this session's own earlier work: mc_cast_users_demo.xml
claimed <function> "isn't subject to" the noupdate/mode guard that
blocks a plain <record> on an already-installed database - false,
odoo/tools/convert.py's _tag_function has the exact same
"if self.noupdate and self.mode != 'init': return" check. What
actually fixed that earlier bug was applying the change as a one-off
manual Python snippet, not the tag choice - the same manual-application
pattern used again here for base.main_company's contact fields on the
already-running school_demo database.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-12 00:53:31 -04:00

54 lines
3.1 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- A third, separate "Powered by Odoo" occurrence, distinct from
the two already hidden in portal_branding_templates.xml
(portal.portal_record_sidebar's text link, and
web.brand_promotion's badge): web.login_layout hardcodes its
own "Powered by <span>Odoo</span>" link straight in the
template, reached by every backend login screen - the very
first thing anyone doing this demo sees before they've even
logged in. Same brand/type system as the rest of the site
(Manrope + Work Sans, navy/indigo) wraps it; the logo shown
stays /web/binary/company_logo, i.e. whichever school is
actually logging in - a login screen is inherently
per-tenant, unlike the marketing homepage. -->
<template id="login_layout_branding" inherit_id="web.login_layout" name="Login - Metatroncube design">
<xpath expr="//a[@href='https://www.odoo.com?utm_source=db&amp;utm_medium=auth']" position="replace"/>
<xpath expr="//div[hasclass('container') and hasclass('py-5')]" position="attributes">
<attribute name="class" add="mc-login-shell" separator=" "/>
</xpath>
<xpath expr="//div[hasclass('container') and hasclass('py-5')]" position="before">
<link rel="preconnect" href="https://fonts.googleapis.com"/>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="crossorigin"/>
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@600;700;800&amp;family=Work+Sans:wght@400;500;600;700&amp;display=swap" rel="stylesheet"/>
<div class="mc-login-bg"/>
<style>
.mc-login-bg{
position:fixed; inset:0; z-index:-1;
background:
radial-gradient(900px 420px at 85% -10%, rgba(75,63,146,.55), transparent 60%),
linear-gradient(180deg, #131B2E 0%, #1C2A46 100%);
}
.mc-login-shell{ font-family:'Work Sans', system-ui, sans-serif; padding-top:8vh !important; }
.mc-login-shell .card{
border-radius:16px !important; box-shadow:0 24px 60px -20px rgba(0,0,0,.45);
padding:6px;
}
.mc-login-shell h1, .mc-login-shell .form-label{
font-family:'Manrope', system-ui, sans-serif;
}
.mc-login-shell .form-label{ font-weight:600; font-size:.85rem; }
.mc-login-shell .form-control{ border-radius:9px; padding:10px 12px; }
.mc-login-shell .form-control:focus{ border-color:#4B3F92; box-shadow:0 0 0 3px rgba(75,63,146,.15); }
.mc-login-shell .btn-primary{
background:linear-gradient(90deg, #4B3F92, #2E63B8); border:none;
border-radius:9px; padding:10px 0; font-weight:600; font-family:'Manrope', sans-serif;
}
.mc-login-shell .btn-primary:hover{ filter:brightness(1.08); }
</style>
</xpath>
</template>
</odoo>