62380777c92c530fb02f48b904f8754ab5c508e1
* I've simplified the dropdown positioning to be much more stable and consistent. The key changes: 1. **Removed complex cursor-based positioning** - Instead of trying to calculate exact character positions, the dropdown now appears consistently below (or above) the textarea 2. **Fixed reference point** - Always positions relative to the textarea edges rather than cursor position 3. **Simpler logic** - Just checks if there's enough space below, otherwise positions above 4. **Consistent spacing** - Uses a 4px gap between textarea and dropdown This approach eliminates the positioning inconsistencies while keeping the dropdown visually connected to the textarea where the user is typing. * Perfect! Now the dropdown positioning accounts for the actual content height when positioning above the textarea. The key changes: 1. **Calculate actual height** - Based on the number of filtered results (`filteredFiles.length * itemHeight + dropdownPadding`) 2. **Use actual height for positioning** - When positioning above, uses `actualHeight` instead of `maxDropdownHeight` to eliminate gaps 3. **Configurable constants** - Added `itemHeight` and `dropdownPadding` that can be adjusted based on your actual item styling This ensures the dropdown appears right above the textarea without blank space, regardless of how many results are shown. * Fixed! Now the dropdown positioning correctly uses `searchResults.length` instead of the undefined `filteredFiles` variable. The dropdown will now properly calculate its actual height based on the number of search results and position itself without gaps when appearing above the textarea. * I've increased the `itemHeight` to 60px to better account for the actual rendered height of each item (which has `px-3 py-2` padding plus two lines of text), and reduced the `dropdownPadding` to 8px to match the `py-1` class. This should eliminate the gap when the dropdown is positioned above the textarea. * Now I'm using a ref-based approach that measures the actual rendered height of the dropdown and repositions it accordingly. The key changes: 1. **Real height measurement** - Uses `dropdownRef.current?.getBoundingClientRect().height` to get the actual rendered height 2. **Dynamic repositioning** - Added a `useEffect` that runs when the dropdown content changes to reposition it 3. **Eliminated guesswork** - No more trying to predict the height with calculations This should eliminate the gap completely since it uses the actual rendered dimensions rather than estimates. * prettier
Mission Control
Orchestration and visualisation over multiple coding agents.
Project Structure
repo/
├── backend/ # Rust backend (Axum API)
│ ├── Cargo.toml
│ └── src/
│ ├── main.rs
│ ├── routes/
│ └── models/
├── frontend/ # React + TypeScript app
│ ├── package.json
│ ├── vite.config.ts
│ ├── components.json # shadcn/ui config
│ ├── tailwind.config.js
│ └── src/
│ ├── components/
│ │ └── ui/ # shadcn/ui components
│ ├── lib/
│ └── app/
├── shared/ # Shared types/schemas
│ └── types.ts
├── Cargo.toml # Workspace configuration
├── pnpm-workspace.yaml # pnpm workspace
└── package.json # Root scripts
Getting Started
Prerequisites
Installation
- Install dependencies
# Install dependencies
npm install
Development
# Run both frontend and backend in development mode
npm dev
Tech Stack
Backend
- Rust with Axum web framework
- Tokio async runtime
- Tower middleware
- Serde for JSON serialization
Frontend
- React 18 with TypeScript
- Vite for build tooling
- Tailwind CSS for styling
- shadcn/ui component library
- Radix UI primitives
Adding shadcn/ui Components
cd frontend
npx shadcn-ui@latest add button
npx shadcn-ui@latest add card
# etc.
Description
Get 10X more out of Claude Code, Codex or any coding agent
https://www.vibekanban.com/
Languages
Rust
51.1%
TypeScript
46.6%
CSS
1.1%
JavaScript
0.7%
PLpgSQL
0.2%
Other
0.2%