Skip to content

Add animated typing effect to homepage hero#1707

Merged
aknysh merged 51 commits intomainfrom
osterman/animated-tool-typing
Nov 10, 2025
Merged

Add animated typing effect to homepage hero#1707
aknysh merged 51 commits intomainfrom
osterman/animated-tool-typing

Conversation

@osterman
Copy link
Member

@osterman osterman commented Oct 23, 2025

what

  • Added Framer Motion library for smooth React animations
  • Created new TypingAnimation component that types and erases text in a loop
  • Updated homepage hero heading to cycle through tool names: Terraform, OpenTofu, Packer, Helmfile, and more
  • Includes realistic typing/erasing animation with blinking cursor

why

  • Static text doesn't showcase the full range of tools Atmos supports
  • Animated typing effect draws attention to the hero section
  • Makes it easy to highlight multiple tool integrations without cluttering the layout
  • Provides modern, engaging user experience that matches current web design trends

references

  • Uses Framer Motion (industry-standard React animation library)
  • Typing speed: 100ms per character
  • Erasing speed: 50ms per character
  • Pause time: 2 seconds after typing completes
  • Easily extensible by adding more tool names to the array

Summary by CodeRabbit

  • New Features

    • Animated hero section with dynamic typing text and eyebrow messaging
    • Interactive feature cards grid displaying key capabilities with icons
    • Enhanced demo showcase with lazy loading for improved performance
  • Documentation

    • Expanded changelog with routing updates and improved navigation
    • Blog post metadata updates for better author attribution and organization
  • Style

    • Modern blog and changelog visual redesign with improved typography
    • Enhanced terminal component styling and color consistency
    • Dark theme support and responsive layout improvements
    • Radial glow effects in hero section

- Install framer-motion library for smooth React animations
- Create TypingAnimation component that cycles through tool names
- Update homepage to animate Terraform, OpenTofu, Packer, Helmfile, etc.
- Includes realistic typing/erasing speeds and blinking cursor
- Easy to extend by adding more tools to the words array

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@osterman osterman requested a review from a team as a code owner October 23, 2025 16:09
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 23, 2025

📝 Walkthrough

Walkthrough

This PR redesigns the homepage with new animated components, updates blog infrastructure with tags and author metadata, refactors Docusaurus configuration to route blog as "changelog," adds UI animation dependencies, and applies comprehensive CSS styling updates for the landing page and component styling.

Changes

Cohort / File(s) Summary
New Animation Components
website/src/components/TypingAnimation/index.tsx, website/src/components/TypingAnimation/index.css
New React component with CSS styling for character-by-character text animation; cycles through word array with configurable typing/deletion speeds.
Lazy Load & Scroll Components
website/src/components/LazyDemo/index.js, website/src/components/ScrollFadeIn/index.js
New components for lazy-loading images via IntersectionObserver and fade-in effects triggered on scroll past 50px.
Homepage Redesign
website/src/pages/index.js
Integrates TypingAnimation, LazyDemo, and ScrollFadeIn; replaces static hero with animated title/description; adds feature grid with icons; updates CTA labels.
Configuration & Routing
website/docusaurus.config.js
Moves blog route to /changelog; reorganizes onBrokenMarkdownLinks handling to markdown.hooks; adds blog sidebar options.
Dependencies
website/package.json
Adds framer-motion and react-icons; removes docusaurus-plugin-llms.
Blog Metadata
website/blog/tags.yml, website/blog/authors.yml
Expands tags with authentication/security/CLI topics; updates atmos author to "Atmos Team"; adds 6 new authors (osterman, aknysh, Nuru, gberenice, Benbentwo, jamengual).
Blog Post Updates
website/blog/2025-10-*.md, website/blog/2025-10-*.mdx, website/blog/welcome.md
Standardizes authors across ~15 posts (replacing atmos with individual contributors); adds sidebar_label field for consistent nav labeling.
Landing Page Styling
website/src/css/landing-page.css
Major redesign: 100vh hero with radial glow, enlarged title typography, hero-demo section with screenshots, responsive feature grid with card styling and hover states.
CSS Enhancements
website/src/css/custom.css
Comprehensive blog/changelog styling: year headings, inline date/tags, author cards, post metadata, sidebar/TOC refinements, and theme-aware color adjustments.
Component Styling
website/src/components/Terminal/index.css
Updates terminal colors (#2d3748 text, #1a1d23 background), adds border/shadow, applies dark-theme overrides.
Documentation & Workflows
website/docs/introduction/index.mdx, .github/workflows/dependency-review.yml
Removes "Live Demo" ReactPlayer section; extends dependency-review license allowlist and disables OpenSSF scorecard output.

Sequence Diagram(s)

sequenceDiagram
    participant Component as TypingAnimation<br/>(React)
    participant Effect as useEffect<br/>(Interval)
    participant State as State<br/>(currentText, etc.)
    
    rect rgb(200, 240, 255)
    Note over Component,State: Typing Phase
    Effect->>State: Set currentText += char
    State->>Component: Render partial text
    Component->>Component: Display with cursor
    end
    
    rect rgb(255, 220, 200)
    Note over Effect,State: Pause Phase
    Effect->>Effect: Wait pauseTime ms
    State->>State: (holding currentText)
    end
    
    rect rgb(220, 200, 255)
    Note over Component,State: Deletion Phase
    Effect->>State: Set currentText -= char
    State->>Component: Render shortened text
    Component->>Component: Display with cursor
    end
    
    rect rgb(200, 255, 200)
    Note over Effect,State: Advance Word
    Effect->>State: currentWordIndex++, reset isDeleting
    State->>Component: Begin next word cycle
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Areas requiring extra attention:

  • Landing page CSS (landing-page.css): Large refactor with new grid/hero sections; verify responsive breakpoints and cross-browser alignment (glow layer, gradients, 100vh constraints).
  • Homepage integration (index.js): Ensure TypingAnimation, LazyDemo, and Framer Motion integrate smoothly; confirm lazy-loading behavior doesn't break on different screen sizes.
  • Blog frontmatter consistency (~15 files): While repetitive, verify all author/sidebar_label updates are correct and tags align with tags.yml.
  • Docusaurus config routing (docusaurus.config.js): Confirm /blog redirect to /changelog works and doesn't break existing links; test markdown hook integration.

Possibly related PRs

Suggested reviewers

  • aknysh
  • jamengual

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately captures the main change: adding an animated typing effect to the homepage hero. It's concise, specific, and directly reflects the primary purpose of the changeset.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch osterman/animated-tool-typing

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 7dcfaab and 19b1d04.

📒 Files selected for processing (1)
  • .github/workflows/dependency-review.yml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/dependency-review.yml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (12)
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: Analyze (go)
  • GitHub Check: Lint (golangci)
  • GitHub Check: Build (macos)
  • GitHub Check: Build (windows)
  • GitHub Check: Analyze (go)
  • GitHub Check: autofix
  • GitHub Check: website-deploy-preview
  • GitHub Check: Lint (golangci)
  • GitHub Check: Run pre-commit hooks
  • GitHub Check: Review Dependency Licenses
  • GitHub Check: Summary

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions bot added the size/m Medium size PR label Oct 23, 2025
@github-actions
Copy link

github-actions bot commented Oct 23, 2025

Dependency Review

The following issues were found:
  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 7 package(s) with unknown licenses.
See the Details below.

License Issues

website/pnpm-lock.yaml

PackageVersionLicenseIssue Type
custom-loadersfile:pluginsNullUnknown License
docusaurus-plugin-llms0.2.2NullUnknown License
@ai-sdk/react2.0.77NullUnknown License
@posthog/core1.3.1NullUnknown License
ai5.0.77NullUnknown License
posthog-js1.280.0NullUnknown License

website/package.json

PackageVersionLicenseIssue Type
react-icons^5.5.0NullUnknown License
Allowed Licenses: MIT, MIT-0, Apache-2.0, BSD-2-Clause, BSD-2-Clause-Views, BSD-3-Clause, ISC, MPL-2.0, 0BSD, Unlicense, CC0-1.0, CC-BY-3.0, CC-BY-4.0, CC-BY-SA-3.0, Python-2.0, OFL-1.1, LicenseRef-scancode-generic-cla, LicenseRef-scancode-unknown-license-reference, LicenseRef-scancode-unicode

Scanned Files

  • website/package-lock.json
  • website/package.json
  • website/pnpm-lock.yaml

osterman and others added 2 commits October 23, 2025 11:14
- Migrate onBrokenMarkdownLinks from root config to markdown.hooks.onBrokenMarkdownLinks
- Add missing blog tags: atmos, authentication, auth, atmos-auth, security, providers, identities, cli, configuration, debugging, inheritance, dx, aws, keyring, productivity, breaking-change
- All blog post tag warnings now resolved
- Build completes successfully without deprecation warnings

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add gradient text styling to match h1 heading in dark theme
- Ensure typing animation inherits white-to-transparent gradient
- Make cursor visible with semi-transparent white background
- Fixes invisible text issue in hero section

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Set blog routeBasePath to 'changelog' to serve blog at /changelog
- Add redirect from /blog to /changelog for backward compatibility
- Update navbar link from /blog to /changelog
- Blog posts now accessible at atmos.tools/changelog

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (3)
website/blog/tags.yml (2)

78-88: Consider consolidating authentication-related tags.

You have three separate authentication tags: authentication, auth, and atmos-auth. Having both authentication and auth (short form) might fragment content. Consider whether all three are necessary or if you could standardize on one or two.


145-147: Singular vs plural forms of breaking-change tags.

Both breaking-changes (line 141-143) and breaking-change (lines 145-147) exist. Having both singular and plural forms could lead to inconsistent tagging.

Pick one form and stick with it for consistency.

website/src/components/TypingAnimation/index.tsx (1)

52-68: Consider accessibility for screen readers.

The continuously changing text might be disruptive for screen reader users. Consider adding aria-live="polite" or aria-hidden="true" with a visually-hidden static alternative for better accessibility.

Example:

 return (
-  <span className="typing-animation">
+  <span className="typing-animation" aria-live="polite" aria-atomic="true">
     <AnimatePresence mode="wait">
       <motion.span
         key={currentText}
         initial={{ opacity: 0 }}
         animate={{ opacity: 1 }}
         exit={{ opacity: 0 }}
         transition={{ duration: 0.1 }}
         className="typing-text"
       >
         {currentText}
       </motion.span>
     </AnimatePresence>
     <span className="typing-cursor" />
   </span>
 );
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 75476a1 and 8c44cab.

⛔ Files ignored due to path filters (1)
  • website/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (6)
  • website/blog/tags.yml (3 hunks)
  • website/docusaurus.config.js (1 hunks)
  • website/package.json (2 hunks)
  • website/src/components/TypingAnimation/index.css (1 hunks)
  • website/src/components/TypingAnimation/index.tsx (1 hunks)
  • website/src/pages/index.js (2 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
website/**

📄 CodeRabbit inference engine (.cursor/rules/atmos-rules.mdc)

website/**: Update website documentation in website/ when adding features
Ensure consistency between CLI help text and website documentation
Follow the website's documentation structure and style
Keep website code in website/ and follow its architecture/style; test changes locally
Keep CLI and website documentation in sync; document new features with examples and use cases

Files:

  • website/src/pages/index.js
  • website/src/components/TypingAnimation/index.css
  • website/docusaurus.config.js
  • website/blog/tags.yml
  • website/src/components/TypingAnimation/index.tsx
  • website/package.json
🧬 Code graph analysis (1)
website/src/pages/index.js (1)
website/src/components/TypingAnimation/index.tsx (1)
  • TypingAnimation (12-69)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: Build (linux)
  • GitHub Check: Build (windows)
  • GitHub Check: autofix
  • GitHub Check: Review Dependency Licenses
  • GitHub Check: website-deploy-preview
  • GitHub Check: Lint (golangci)
  • GitHub Check: Analyze (go)
  • GitHub Check: Summary
🔇 Additional comments (6)
website/package.json (1)

34-34: Verify the inconsistency between the summary and code.

The AI summary states that docusaurus-plugin-llms was removed, but it's still present in the dependencies and configured in docusaurus.config.js (lines 156-171). The postbuild script (line 9) also depends on the llms.txt files this plugin generates.

website/src/pages/index.js (2)

7-7: Import looks good.

Clean import of the new component.


19-19: Component usage is correct.

The TypingAnimation component is properly integrated with the required words prop. The word list effectively showcases the supported tools.

website/docusaurus.config.js (1)

329-331: Markdown link handling looks reasonable.

Adding the onBrokenMarkdownLinks: 'warn' hook is a sensible way to handle broken links without failing the build.

website/src/components/TypingAnimation/index.css (1)

1-30: Core animation styles look solid.

The typing animation container, text, cursor, and blink keyframes are well-structured.

website/src/components/TypingAnimation/index.tsx (1)

5-10: Props interface is clean.

The interface clearly defines required and optional parameters.

- Remove Framer Motion AnimatePresence that caused flashing
- Use plain span for smooth character-by-character typing
- Text now appears/disappears naturally without fade transitions
- Eliminates jarring visual flash on each character change

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
… messaging

- Add hero subtitle: "Atmos is an IaC Framework"
- Add tagline: "Atmos: Sanity for the Modern Platform Engineer"
- Create compelling narrative section addressing tool fatigue
- Highlight key features: vendoring, auth, workflows, templating, multi-identity
- Use personality-driven copy that resonates with frustrated platform engineers
- Add styled feature list with checkmarks and emphasis
- Include memorable closer: "cures tool insanity"
- Responsive design for mobile devices

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Reduce oversized blog post titles from ~4rem to 2.5rem
- Reduce blog list titles to 2rem for better readability
- Add real GitHub profiles: osterman, aknysh, Nuru, gberenice
- Use GitHub avatars (username.png) for authentic author photos
- Improve author card styling with better sizing and spacing
- Add modern tag styling with rounded corners
- Improve spacing and typography throughout blog
- Better metadata styling (dates, read time)
- More professional, modern blog appearance

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
osterman and others added 2 commits October 23, 2025 11:33
- Remove 500+ word narrative section (way too much text)
- Replace with clean 4-card feature grid
- Modern card design with hover effects
- Concise value props: Auth, Vendoring, Workflows, Scaffolding
- Responsive grid layout with proper spacing
- Subtle glassmorphism styling
- Emoji icons for visual hierarchy
- Much more scannable and modern

No more "grandma learning frontpage" vibes 😅

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Changed authors from [atmos] to [aknysh] (Principal Architect)
- All 16 blog posts now attributed to Andriy Knysh
- Posts will now show real GitHub avatar and profile
- Ready to assign posts to specific authors as needed

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
osterman and others added 2 commits October 23, 2025 11:39
- Update blogSidebarTitle to 'Recent Changes' for changelog context
- Set blogSidebarCount to 'ALL' to show all changelog entries
- Better reflects that this is a changelog, not a traditional blog

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Remove competing subtitle and tagline (too many styles)
- Lead with core message: "Sanity for the Modern Platform Engineer"
- Move typing animation to description line (cleaner hierarchy)
- Add fixed-width container (min-width: 180px) to prevent layout shift
- Use eyebrow text "IaC Framework" instead of floating subtitle
- Much cleaner, single-focus hero like Cloud Posse website
- No more bouncing text behind header

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Increase sidebar width from default (~250px) to 280px on mobile
- Increase to 300px on desktop (min-width: 997px)
- Add better line height for wrapped text
- Prevents awkward wrapping like "Docker / Dev Container Development"
- More readable sidebar with proper spacing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
…ar separation

- Replace UTF-8 emoji icons with professional React icons from react-icons/ri
  - 🔒 → RiLockLine (Unified Authentication)
  - 📦 → RiBox3Line (Simplified Vendoring)
  - ⚡ → RiFlashlightLine (Workflow Orchestration)
  - 🏗️ → RiStackLine (Component Inheritance)

- Tighten hero section spacing for cleaner, more modern look
  - Reduce eyebrow/description margins from 1.5em to 1rem
  - Reduce description font size from 1.3em to 1.2em
  - Reduce features grid margin from 4rem to 2rem
  - Reduce features grid gap from 2rem to 1.5rem
  - Reduce feature card padding from 2rem to 1.75rem
  - Adjust feature card typography (h3: 1.3rem, p: 0.95rem)

- Fix blog sidebar run-on paragraph appearance
  - Add 0.75rem margin-bottom between sidebar items
  - Add subtle border-bottom separator (rgba(255, 255, 255, 0.05))
  - Improve visual hierarchy and readability

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add MIT-0, CC-BY-4.0, Python-2.0, and OFL-1.1 to allowed licenses:
- MIT-0: MIT No Attribution (more permissive than MIT, used by csstools)
- CC-BY-4.0: Creative Commons Attribution (FontAwesome, react-icons)
- Python-2.0: Python Software Foundation License (argparse)
- OFL-1.1: SIL Open Font License (FontAwesome fonts)

All are OSI-approved or standard permissive licenses for their domains.
osterman and others added 2 commits October 31, 2025 11:23
Added missing licenses from website dependencies:
- BSD-2-Clause-Views: BSD variant used by uri-js
- CC-BY-3.0, CC-BY-SA-3.0: Creative Commons licenses from react-icons
- LicenseRef-scancode-generic-cla: CLA reference from marked package
- LicenseRef-scancode-unknown-license-reference: MIT-compatible license refs
- LicenseRef-scancode-unicode: Unicode license from ECMAScript packages

All are permissive open-source licenses compatible with the project's
licensing requirements.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@mergify
Copy link

mergify bot commented Nov 4, 2025

💥 This pull request now has conflicts. Could you fix it @osterman? 🙏

@mergify mergify bot added the conflict This PR has conflicts label Nov 4, 2025
Resolved merge conflict in website/blog/authors.yml by preserving all author entries from both branches.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Fixes critical issues and improves accessibility:

- Fix memory leak in TypingAnimation by cleaning up inner setTimeout
- Add empty words array validation to prevent undefined access
- Fix ScrollFadeIn to use IntersectionObserver for per-element visibility
- Add prefers-reduced-motion support via MotionConfig
- Improve accessibility with aria-hidden and visually-hidden text
- Remove invalid :contains() CSS pseudo-selector causing parse errors
- Remove duplicate CSS rules for ::selection and .hero-demo-intro.visible

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@mergify
Copy link

mergify bot commented Nov 9, 2025

💥 This pull request now has conflicts. Could you fix it @osterman? 🙏

@mergify mergify bot added the conflict This PR has conflicts label Nov 9, 2025
Resolved conflict in conductor.json by keeping main's pnpm-based setup.
@osterman
Copy link
Member Author

✅ CodeRabbit Review Issues Resolved

All critical and major issues from the CodeRabbit review have been addressed in commit 9b88522.

Fixed Issues

Issue Status Details
Invalid :contains() CSS selector ✅ Fixed Removed non-standard pseudo-selector causing parse errors
Memory leak in TypingAnimation ✅ Fixed Inner pauseTimeout now properly tracked and cleaned up
Empty words array handling ✅ Fixed Added validation to return null for empty/undefined words
ScrollFadeIn global scroll issue ✅ Fixed Replaced with IntersectionObserver for per-element tracking
Missing accessibility attributes ✅ Fixed Added aria-hidden and visually-hidden text alternative
Missing prefers-reduced-motion ✅ Fixed Wrapped page in MotionConfig reducedMotion="user"
Duplicate CSS rules ✅ Fixed Removed duplicate ::selection and .hero-demo-intro.visible rules

Not Changed (Intentional)

  • Blog tags (dx vs developer-experience): These are intentional aliases allowing flexibility in author tagging
  • CSS gradient syntax: No longer applicable - file has been updated since review

Commit Reference

All fixes: 9b88522

The PR is now ready for re-review with all blocking issues resolved.

@aknysh aknysh merged commit ed571f9 into main Nov 10, 2025
54 checks passed
@aknysh aknysh deleted the osterman/animated-tool-typing branch November 10, 2025 19:11
@mergify mergify bot removed the needs-cloudposse Needs Cloud Posse assistance label Nov 10, 2025
@github-actions
Copy link

These changes were released in v1.198.0-test.12.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-release Do not create a new release (wait for additional code changes) size/xl Extra large size PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants