Skill: Create Landing Page

Use this skill when the user asks to create a landing page, landing, лендинг, landing page.

Steps

  1. Determine slug and title from user request. Slug: lowercase, underscores only, no hyphens, no spaces (e.g. cat_rental). The URL will be {TRIP2G_URL}/{slug}.

  2. Read the layout reference to know available components:

    read_file /opt/data/secondbrain/_layouts/iiminion/README.md
    
  3. Create the page markdown file at /opt/data/secondbrain/<slug>.md:

    ---
    layout: iiminion/index
    title: <Page Title>
    description: >-
      <Short SEO/social preview description>
    og_title: <Page Title>
    og_description: >-
      <Short social preview description>
    ---
    

    The shared iiminion shell renders title, description, Open Graph tags, and twitter:card: summary_large_image. Use a 1200×630 PNG preview image in the layout assets when the landing needs Telegram/Twitter large previews. The page can be empty — the layout renders everything. Add frontmatter fields if the layout supports them.

  4. Optionally create a custom layout if the default index.html doesn't fit:

    • Copy /opt/data/secondbrain/_layouts/iiminion/index.html as base, or create _layouts/<layout-name>/index.html for a standalone Trip2G layout.
    • Save custom CSS/JS next to the layout, e.g. _layouts/<layout-name>/final.css and _layouts/<layout-name>/final.js.
    • In HTML, local assets must be referenced through Trip2G's helper, not raw relative paths:
      <link rel="stylesheet" href='{{ asset("final.css") }}' />
      <script src='{{ asset("final.js") }}'></script>
      
    • Update page frontmatter: layout: iiminion/<custom-name> or layout: <layout-name>/index.
    • After sync, verify Assets uploaded / up-to-date assets and check the public HTML has signed storage URLs instead of raw {{ asset(...) }}.
  5. Update landing_pages.md at /opt/data/secondbrain/landing_pages.md:

    - [[<slug>]] — <title> — created <YYYY-MM-DD>
    

    Create the file if it doesn't exist (header: # Landing Pages). Add [[landing_pages]] to _index.md if not there.

  6. Log in today's daily note /opt/data/secondbrain/daily/YYYY-MM-DD.md:

    HH:MM user: <original user request>
    Created landing page [[<slug>]] with layout iiminion/index.
    
  7. Sync vault:

    terminal: /opt/data/sync --verbose
    

    For custom layout assets, acceptance checks are: sync exits cleanly, assets are uploaded or up-to-date, the public page contains no raw {{ asset(...) }}, asset URLs are signed storage URLs, and linked CSS/JS return HTTP 200.

  8. Send link to user: {TRIP2G_URL}/<slug>

  9. Ask user to review and offer to adjust layout components or content.

Layout rules (from README)

  • Always use @lid / @did placeholders in component files — never write expanded names manually
  • CSS blocks: no <style> tags, bare CSS only
  • New component: copy template from README, save as _layouts/iiminion/<name>.html, add {{ yield iiminion_<name>() }} to index.html
  • Components auto-import — no {{ import }} needed