Mobile App UI Design
ceorkm/mobile-app-ui-design
Design high-quality mobile app UI/UX screens, flows, and components.
Build or revise Tabame quick menu top-bar buttons in lib/widgets/itzy/quickmenu/button.dart.
$ npx skills add Far-Se/tabame --skill tm-quick-action -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Far-Se/tabame tm-quick-action --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Far-Se/tabame.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/tm-quick-action .claude/skills/tm-quick-action && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "tm-quick-action" agent skill from https://github.com/Far-Se/tabame/tree/main/.agents/skills/tm-quick-action into .claude/skills/tm-quick-action/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tm-quick-action", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Far-Se/tabame/tree/main/.agents/skills/tm-quick-actionType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Far-Se/tabame --skill tm-quick-action -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Far-Se/tabame tm-quick-action --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Far-Se/tabame.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/tm-quick-action .agents/skills/tm-quick-action && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "tm-quick-action" agent skill from https://github.com/Far-Se/tabame/tree/main/.agents/skills/tm-quick-action into .agents/skills/tm-quick-action/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tm-quick-action", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Far-Se/tabame --skill tm-quick-action -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Far-Se/tabame tm-quick-action --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Far-Se/tabame.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/tm-quick-action .cursor/skills/tm-quick-action && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "tm-quick-action" agent skill from https://github.com/Far-Se/tabame/tree/main/.agents/skills/tm-quick-action into .cursor/skills/tm-quick-action/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tm-quick-action", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Far-Se/tabame.git --path .agents/skills/tm-quick-action--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Far-Se/tabame --skill tm-quick-action -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Far-Se/tabame tm-quick-action --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Far-Se/tabame.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/tm-quick-action .gemini/skills/tm-quick-action && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "tm-quick-action" agent skill from https://github.com/Far-Se/tabame/tree/main/.agents/skills/tm-quick-action into .gemini/skills/tm-quick-action/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tm-quick-action", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Far-Se/tabame tm-quick-actionInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Far-Se/tabame --skill tm-quick-action -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Far-Se/tabame.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/tm-quick-action .github/skills/tm-quick-action && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "tm-quick-action" agent skill from https://github.com/Far-Se/tabame/tree/main/.agents/skills/tm-quick-action into .github/skills/tm-quick-action/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tm-quick-action", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Far-Se/tabame --skill tm-quick-action -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Far-Se/tabame tm-quick-action --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Far-Se/tabame.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/tm-quick-action .opencode/skills/tm-quick-action && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "tm-quick-action" agent skill from https://github.com/Far-Se/tabame/tree/main/.agents/skills/tm-quick-action into .opencode/skills/tm-quick-action/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tm-quick-action", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
tm-quick-actionBuild or revise Tabame quick menu top-bar buttons in lib/widgets/itzy/quickmenu/button.dart.
Tm Quick Action is an agent skill from Far-Se/tabame. Build or revise Tabame quick menu top-bar buttons in lib/widgets/itzy/quickmenu/button.dart. Use when adding a new quick menu button, redesigning an existing button panel, or aligning a panel with the established Tabame "Instrument Panel" design language (high-density, technical, pro-audio/aviation-grade aesthetic).
Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Mobile, covering Cross-platform mobile apps. It works with Flutter. The repository describes itself as: Tabame is an alternative to Windows Taskbar. It's Raycast and Powertoys combined. The licence is MIT.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit d3b2b4d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are dart).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Tm Quick Action loads about 4.3k tokens when it runs. Until then it costs about 84 tokens; SKILL.md has 1,514 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Far-Se/tabame at commit d3b2b4d, republished under its MIT licence (© Far-Se). 1,514 words, ~4,284 tokens.
.claude/skills/tm-quick-action/SKILL.md (or your agent's skills folder).Build new Tabame quick menu buttons by matching the existing launcher-to-modal structure and the "Instrument Panel" design language used across bookmarks, apps, vault, currency converter, and timezone.
Use these files as the baseline references:
lib/widgets/itzy/quickmenu/button_bookmarks.dartlib/widgets/itzy/quickmenu/button_apps.dartlib/widgets/itzy/quickmenu/button_vault.dartlib/widgets/itzy/quickmenu/button_currency_converter.dartlib/widgets/itzy/quickmenu/button_timezone.dartlib/widgets/widgets/panel_header.dart, lib/widgets/widgets/quick_actions_item.dart, lib/models/util/quickmenu_modal.dartStart with a small launcher widget that only opens the panel:
class ExampleButton extends StatelessWidget {
const ExampleButton({super.key});
@override
Widget build(BuildContext context) {
return QuickActionItem(
message: "Example",
icon: const Icon(Icons.extension_rounded),
onTap: () => showQuickMenuModal(
context: context,
child: const ExamplePanel(),
),
);
}
}Follow this split:
StatelessWidget for the launcher unless the button itself owns transient state.showQuickMenuModal() for most buttons. Pass maxWidth or heightFactor only when the interaction clearly needs it, like timezone.Every new quick menu button must be registered in lib/models/util/quick_action_list.dart:
// 1. Add import at the top (alphabetical)
import '../../widgets/itzy/quickmenu/button_example.dart';
// 2. Add an entry to quickActionsMap – key is the button's identifier,
// widget is a factory (not a const instance directly)
final Map<String, QuickAction> quickActionsMap = <String, QuickAction>{
...
"ExampleButton": QuickAction(
icon: Icons.extension_rounded,
widget: () => const ExampleButton(),
),
};QuickAction.name is optional and rarely set – the map key is what drives discovery/pinning in settings and the top/bottom bars (see lib/widgets/quickmenu/top_bar.dart, lib/widgets/quickmenu/bottom_bar.dart, lib/widgets/interface/quickmenu/quickactions_settings.dart).
Build the panel as a vertical layout with a strong header and one flexible content area:
class ExamplePanel extends StatefulWidget {
const ExamplePanel({super.key});
@override
State<ExamplePanel> createState() => _ExamplePanelState();
}
class _ExamplePanelState extends State<ExamplePanel> {
@override
Widget build(BuildContext context) {
return Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: C.start,
children: <Widget>[
const PanelHeader(
title: "Example",
icon: Icons.extension_rounded,
),
Flexible(
child: Material(
type: MaterialType.transparency,
child: _buildBody(),
),
),
],
);
}
}PanelHeader (lib/widgets/widgets/panel_header.dart) takes title, icon, and optionally accent (defaults to Design.accent), buttonPressed + buttonIcon (+ buttonTooltip) for a single trailing action, and extraActions for more. It also handles window-drag behavior – always put it first in the column, never recreate its drag/border chrome manually.
Prefer this hierarchy:
PanelHeader first.Flexible body second.WindowsScrollView, ListView, or MouseScrollWidget inside the body depending on content density – never SingleChildScrollView.Material(type: MaterialType.transparency) around interactive body content when Ink reactions need a Material ancestor.Reference Design (lib/models/settings.dart) directly inside widget bodies – do not thread accent/onSurface-style colors through function parameters; that indirection is unnecessary now that Design is globally available.
Design.accent – drives all interactive/selected state.Design.text – replaces Theme.of(context).colorScheme.onSurface.Design.baseFontSize – replaces hardcoded sizes; add an offset like Design.baseFontSize + 2.5 for emphasis.Design.borderRadius for theme-driven rounding when a fixed radius isn't called for.Design.baseFontSize to Design.baseFontSize + 2 (≈11.5–13px).Design.baseFontSize - 1 to Design.baseFontSize + 0.5 (≈9–11px).Design.baseFontSize + 2.5 and up.0.3 to 0.7 for technical/uppercase labels.FontWeight.w400 for content, w600/w700 for labels, counts, and headings – never w900.EdgeInsets.fromLTRB(8, 8, 8, 10) for the main list/body.SizedBox(height: 8) between vertical cards.EdgeInsets.fromLTRB(10, 9, 10, 8).SizedBox(height: 2) between a header and its description; SizedBox(height: 8-10) before interactive controls (sliders, chips).10px (compact) to 14px (comfortable).25px or 30px. Sliders are 20px high.8, 10, 12, 14, 16, or 18.withAlpha to layer on the theme surface.Design.text.withAlpha(7-8).Design.text.withAlpha(16).Design.accent.withAlpha(10) to Design.accent.withAlpha(28).Design.text.withAlpha(18) to Design.text.withAlpha(32).Design.accent.withAlpha(60). Hover/selection (passive): Design.accent.withAlpha(10-18).Design.accent.withAlpha(70-90).Divide content within a panel with labels instead of standard headers – pattern is icon + label + optional count pill + divider:
Widget _buildSectionLabel({required String label, required int count, required IconData icon}) {
return Row(
children: <Widget>[
Icon(icon, size: 14, color: Design.accent),
const SizedBox(width: 6),
Text(
label.toUpperCase(),
style: TextStyle(
fontSize: Design.baseFontSize + 1,
fontWeight: FontWeight.w700,
letterSpacing: 0.5,
color: Design.text,
),
),
const SizedBox(width: 6),
Container(
padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2),
decoration: BoxDecoration(color: Design.accent.withAlpha(28), borderRadius: BorderRadius.circular(99)),
child: Text("$count", style: TextStyle(fontSize: Design.baseFontSize, color: Design.accent)),
),
const SizedBox(width: 8),
Expanded(child: Divider(height: 1, color: Design.text.withAlpha(20))),
],
);
}A vertical container grouping related settings (used for sidebars, modals, and narrow config panels like the QuickMenu Design panel):
Container(
padding: const EdgeInsets.fromLTRB(10, 9, 10, 8),
decoration: BoxDecoration(
color: Design.text.withAlpha(7),
borderRadius: BorderRadius.circular(10),
border: Border.all(color: Design.text.withAlpha(16)),
),
child: Column(
crossAxisAlignment: C.start,
children: <Widget>[
Row(
children: <Widget>[
Expanded(child: Column(...)), // Title & description
_buildMetaChip(...), // Value badge
],
),
const SizedBox(height: 8),
Slider(...), // Interactive control
],
),
)Highlighted/active card state: background Design.accent.withAlpha(10), border Design.accent.withAlpha(30).
Compact badges for showing values (hex codes, percentages, toggles):
StadiumBorder / BorderRadius.circular(999).EdgeInsets.symmetric(horizontal: 7, vertical: 3).fontWeight: FontWeight.w700.Used for mode switching within a card:
ChoiceChip with visualDensity: VisualDensity.compact.labelStyle: fontSize: Design.baseFontSize + 1.5.Design.accent.withAlpha(18).InkWell text labels (e.g. "Pick") instead of heavy buttons for secondary actions.Major actions like "Save Changes" or "Add Item" anchor at the bottom while content scrolls independently above:
Widget _buildFixedBottomBar({required String label, required VoidCallback onTap}) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
decoration: BoxDecoration(
border: Border(top: BorderSide(color: Design.text.withAlpha(15))),
),
child: Center(
child: InkWell(
onTap: onTap,
borderRadius: BorderRadius.circular(8),
child: AnimatedContainer(
duration: const Duration(milliseconds: 150),
padding: const EdgeInsets.symmetric(vertical: 9, horizontal: 32),
decoration: BoxDecoration(
color: Design.accent.withAlpha(28),
borderRadius: BorderRadius.circular(8),
border: Border.all(color: Design.accent.withAlpha(80), width: 1),
),
child: Text(
label,
style: TextStyle(
fontSize: Design.baseFontSize + 1.5,
fontWeight: FontWeight.w700,
letterSpacing: 0.5,
color: Design.accent,
),
),
),
),
),
);
}Avoid "screaming" solid backgrounds, heavy shadows, or glossy gradients – use a subtle accent fill with a more defined accent border instead, and precise single-pixel borders elsewhere.
Use these reference-specific patterns for inspiration:
button_bookmarks.dart: compact hover rows, light accent bar, grouped sections, restrained text.button_apps.dart: collapsible category sections, grid-or-list body, simple empty state, low-noise chrome.button_vault.dart: stateful multi-step panel flow, header actions that change with mode, inline error strip.button_currency_converter.dart: prominent result card, input-first layout, data cards with light borders, loading states.button_timezone.dart: dual-mode panel with planner/settings toggle, chips, search field, structured result cards.Design the panel for quick execution, not deep navigation:
CancelTraversal(child:).For button actions:
WinUtils.open(...).QuickMenuFunctions.hideQuickMenu() when that matches existing behavior.Boxes.updateSettings(...) and mirror to in-memory state.Standard pattern for linear values dragged vertically:
onVerticalDragStart: reset the accumulator.onVerticalDragUpdate: accumulate delta.dy. Trigger every 10-15px of movement.volume_up/volume_down) temporarily.Keep expensive work out of build methods unless it is trivial and synchronous.
Prefer:
initState() when the panel opens.Avoid:
build().build().Choose the body layout based on the job:
If the panel risks becoming long or multi-purpose:
Always design all three when the panel depends on data:
Keep message tone direct and practical. Existing panels use short operational text, not marketing copy.
Before finishing a new quick menu button:
QuickActionItem.showQuickMenuModal().PanelHeader.Design.accent / Design.text directly, not threaded through parameters.Flexible body using WindowsScrollView/ListView/MouseScrollWidget.Boxes.updateSettings(...) when needed.quickActionsMap in lib/models/util/quick_action_list.dart (import + map entry with widget: () => const ExampleButton()).If the user asks for a new top-bar quick menu button and does not specify a style:
QuickActionItem launcher.PanelHeader with one optional trailing action button.Column with one Flexible body.© Far-Se, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/tm-quick-action of Far-Se/tabame.
Open the folder on GitHubat commit d3b2b4d
Tm Quick Action next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Tm Quick Action this skillFar-Se/tabame | 372 | — | ~4.3k | Automated safety check: Pass | MIT | |
| Mobile App UI Designceorkm/mobile-app-ui-design | 400 | — | ~2k | Automated safety check: Pass | None | |
| Cue AnimationsMilad-Akarie/cue | 119 | 1 repos | ~6.6k | Automated safety check: Pass | MIT | |
| Marionette Flutter Drive Appleancodepl/marionette_mcp | 473 | — | ~11k | Automated safety check: Pass | Apache-2.0 | |
| AnimationsVeryGoodOpenSource/vgv-ai-flutter-plugin | 169 | — | ~3.5k | Automated safety check: Pass | MIT | |
| Flutter Riverpod State Managementandrewyng/context-hub | 14k | — | ~1.1k | Automated safety check: Pass | MIT |
ceorkm/mobile-app-ui-design
Design high-quality mobile app UI/UX screens, flows, and components.
Milad-Akarie/cue
Flutter animation using the Cue package. An agent skill from Milad-Akarie/cue.
leancodepl/marionette_mcp
Set up and drive a running Flutter app (debug or profile) with Marionette — an AI agent's hands and eyes for the app.
VeryGoodOpenSource/vgv-ai-flutter-plugin
Best practices for Flutter animations using the built-in animation framework, covering implicit animations, explicit AnimationController animations, page transitions, and Material 3 motion tokens.
andrewyng/context-hub
Guides Flutter state management with Riverpod: choosing provider types, wiring ConsumerWidgets, handling async state and lifecycle, and overriding providers in tests.
abdulmominsakib/localmind
Use LayoutBuilder, MediaQuery, or Expanded/Flexible to create a layout that adapts to different screen sizes.
Far-Se/tabame
Create or revise Tabame's Flutter launcher designs: frames, search bars, result rows, palettes, typography, and action dialogs.
Far-Se/tabame
Author a Tabame launcher plugin – an external Python/Node/Bun script that extends the app launcher, talking newline-delimited JSON over stdin/stdout.
Works with
Categories
Build or revise Tabame quick menu top-bar buttons in lib/widgets/itzy/quickmenu/button.dart. Tm Quick Action is an agent skill from Far-Se/tabame.dart.
Tm Quick Action fits situations like: adding a new quick menu button; redesigning an existing button panel; aligning a panel with the established Tabame Instrument Panel design language (high-density; pro-audio/aviation-grade aesthetic).
Run `npx skills add Far-Se/tabame --skill tm-quick-action -a claude-code`. Or copy the skill folder (.agents/skills/tm-quick-action in Far-Se/tabame) into .claude/skills/tm-quick-action in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Far-Se/tabame --skill tm-quick-action -a codex`. Or copy the skill folder (.agents/skills/tm-quick-action in Far-Se/tabame) into .agents/skills/tm-quick-action in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Far-Se/tabame --skill tm-quick-action -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tm-quick-action, .gemini/skills/tm-quick-action, .github/skills/tm-quick-action and .opencode/skills/tm-quick-action in your project.
SKILL.md names no scripts, command-line tools or credentials: Tm Quick Action is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Tm Quick Action is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.3k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Tm Quick Action: Mobile App UI Design (ceorkm/mobile-app-ui-design, 400 stars), Cue Animations (Milad-Akarie/cue, 119 stars), Marionette Flutter Drive App (leancodepl/marionette_mcp, 473 stars) and Animations (VeryGoodOpenSource/vgv-ai-flutter-plugin, 169 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Far-Se (a GitHub user) maintains it in Far-Se/tabame, which has 372 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 7, 2026.
Source: Far-Se/tabame on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.