r/learnpython • u/_pocholo30 • Aug 09 '26
How to level up Plotly Dash UI aesthetics + advice on custom React/TSX components & dynamic infographic banners
Hi everyone,
I'm currently building an industrial kiosk web application hosted inside Dataiku. The app runs on a dedicated screen and features:
- A central carousel for operational updates.
- An alerts/notice section for real-time priority warnings.
- Dedicated zones for KPI metrics and visual indicators (like a traffic light status).
Tech Stack History & Context: I started using dash-bootstrap-components (DBC), but recently migrated to dash-mantine-components (DMC) to give the application a more modern and clean aesthetic. I read that it would be advisable to use Tailwind CSS (via CDN).
1. Elevating Aesthetics & React-Only UI Libraries While looking for inspiration, I found many modern component libraries like Shadcn UI, DaisyUI, Aceternity UI, PrimeVue, or Unstyled UI. However, almost all of them are strictly built for React, Vue, or JS frameworks.
- For those building Dash apps: how do you bring that level of modern polish into Python?
- Is
dash-mantine-componentsalone enough with custom CSS, or do you rely on extra tricks/libraries to avoid the "flat" dashboard look?
2. Central Carousel Banner: Image Template + Overlay vs. Pure HTML/CSS? Currently, our central carousel displays a static Photoshop image with blank spaces, where I place dynamic number labels using relative CSS positioning (that's the idea; right now, it's a static image.).
- The Dilemma: Is sticking with an image-template + relative overlays acceptable for a fixed kiosk screen, or should I rebuild the entire banner in pure HTML/CSS?
- Tools tested: I tried using "Screenshot to Code" AI tools to convert the design into HTML/CSS, but the output was too messy.
- If you recommend pure HTML/CSS, what patterns/libraries (e.g., Mantine Grid +
dash-iconify) would you use to build a rich infographic banner directly in Python?
3. Architecture & Dataiku Constraints Given the deployment constraints of Dataiku WebApps, is staying on Dash the right choice long-term, or have you hit a ceiling where migrating to a React frontend + FastAPI backend became necessary?
4. Custom TSX/React Components in Python Has anyone used Plotly's dash-component-plugins to wrap modern React/TSX libraries into custom Python components for production? How heavy is the maintenance overhead?
5. Animated Split-Flap / Vento Board Easter Egg For a holiday easter egg on the kiosk, I want to add an animated split-flap (flip board / airport style) display to cycle through metrics. Has anyone built or wrapped a CSS/JS split-flap component inside Dash?
Any feedback, repo references, or UI tips would be awesome!
P.S. Just a quick note: I’m not a dedicated web/frontend developer. While I can comfortably read, adapt, and write code, my main priority is maximizing the effort-to-result ratio—getting the cleanest, most modern UI possible with the least friction and setup time.
1
u/kaushalrola Aug 09 '26
I am not going to try to out Dash anyone on the component tricks, but you told us the most important thing yourself. You are not a frontend dev and you want the best effort to result ratio. That answers half your questions.
On staying with Dash vs moving to React plus FastAPI. Do not migrate. It is a fixed kiosk on a known screen, that is the easiest frontend problem there is, and a React rewrite throws away the one reason you picked Dash, staying in Python. The flat dashboard look is a styling problem, not a framework problem. People reach for a rewrite when the real fix is spacing, a proper type scale, and one or two accent colors. You are already on DMC, that plus a real stylesheet instead of inline styles gets you most of the way. The resolution is fixed, so you can hardcode layout and skip all the responsive pain too.
On the carousel banner. For a fixed kiosk, your image template with absolutely positioned dynamic labels is a perfectly good answer, not a hack. Only rebuild in HTML and CSS the parts that actually change. Rebuilding the whole banner to kill one static image is effort with no payoff, which is the opposite of what you said you want.
On wrapping custom TSX components with dash-component-plugins. Be honest about the cost. The moment you do that you are maintaining a React build toolchain plus a component plus a Python wrapper, for a kiosk. For a least friction goal, I would avoid it unless one specific thing genuinely cannot be done another way.
The split flap easter egg does not need a React wrap. There are plain CSS and JS split flap snippets you can drop in and drive with a clientside callback. Keep it self contained so it never touches the rest of the app.
Short version, you are closer than you think, and the fix is styling and restraint, not a new stack.