Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
프로젝트·청구·시간·협업을 하나의 자체 호스팅 워크스페이스에서 관리, 오픈소스이며 Docker로 배포
Manage projects, invoices, time tracking, and client collaboration from a single self-hosted workspace. Open source. Deploy with Docker.
비즈니스HTML · RustGitHub @launchdoor-studio온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A self hosted client portal for freelancers to manage projects, clients, and payments in one place.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A GPU-accelerated terminal workspace — tabs, panes, and room for agents.
botttle is a terminal emulator that draws on the GPU. Every pane runs your login
shell through a real PTY and a full ANSI emulator, and the entire window — grid,
chrome, tab strip — is rendered by GPUI, the same engine
behind Zed.README 전문 보기 ↗botttle is a terminal emulator that draws on the GPU. Every pane runs your login shell through a real PTY and a full ANSI emulator, and the entire window — grid, chrome, tab strip — is rendered by GPUI, the same engine behind Zed.
It is also a workspace. Panes split right and down to any depth, tabs hold their own layouts, and both are first-class rather than bolted on: a new pane starts in the directory the current one is in, the focused pane is marked so you can see where input lands, and the emulator's state — title, cursor, working directory — is available to the app around it.
That structure is the point. Everything an agent does in a development loop —
running builds, reading logs, driving tools — already happens in a terminal, but
a terminal treats all of it as one undifferentiated stream of bytes. botttle
keeps the terminal's honesty — ctrl-c, ctrl-d and the rest reach the program
untouched — while giving the surrounding workspace the structure
that agent-driven work needs. The next step is a pane that is an agent session
rather than a shell, sharing the same tree, tab, and working directory.
Status: early, and moving. It is used daily by its author on macOS. Linux should build — the platform-specific paths are there — but is untested.
Terminal
alacritty_terminal),
24-bit color, text attributes, and configurable scrollback.chsh to fish or
anything else takes effect in the next pane, not the next macOS login.less and vim get it as arrow keys;
shift always scrolls botttle's own history. shift-pageup / pagedown /
home / end page through it, and a thumb shows where you are.⌘C needed (it can be turned off).Workspace
⌘⇧R, or File → Rename Tab… . A
name sticks however the program retitles the pane; clear it to go back.⌘N, File → New Window, or the Dock icon's menu. Each
new one steps out from the last instead of landing on top of it.Built for coding CLIs
shift-enter is a newline, not a send. Terminals have always sent the same
byte for both, so botttle sends ESC CR — the sequence Claude Code's own
/terminal-setup installs into other terminals.ctrl-v pastes an image by writing it to a file and typing the path, which
is how Claude Code and Codex take images. With no image on the clipboard,
ctrl-v reaches the program untouched.⌘-click opens a URL or a path. Holding ⌘ underlines the target first.
Paths resolve against the pane's working directory, and a file.rs:42:9
position suffix opens the file. Links programs attach behind their text
(OSC 8) — Claude Code, ls --hyperlink, gh, delta — open too.Appearance
Not there yet: IME composition, search, the kitty keyboard protocol, and the agent layer itself.
git clone https://github.com/launchdoor-studio/botttle
cd botttle
scripts/bundle-macos.sh --install
This builds a release botttle.app, gives it the icon, signs it with the best
identity in your keychain, and copies it to /Applications. Because the bundle
identifier and signing identity are stable, permissions you grant it survive a
rebuild.
Signing prefers a Developer ID Application certificate, then an Apple Development
certificate, then an ad-hoc signature — all three run on the machine that built
them. Pass --sign "<identity>" to choose one, or --no-sign to skip it.
To hand the app to someone else, Gatekeeper wants it notarized:
scripts/bundle-macos.sh --notarize --install
That submits the signed zip through asc using
the App Store Connect key already in your keychain, staples the ticket, and
prints the Gatekeeper verdict. The Developer ID Application certificate itself
has to be created once by hand at
https://developer.apple.com/account/resources/certificates/add — the App Store
Connect API refuses it with "This operation can only be performed by the Account
Holder."
cargo run --release
Needs a recent stable Rust toolchain. On Linux, GPUI also needs the usual Wayland or X11 development packages.
⌘ on macOS; ctrl+shift elsewhere.
| Chord | Action |
|---|---|
⌘N | New window |
⌘T | New tab |
⌘W | Close pane — closes the tab with the last pane |
⌘⇧W | Close tab |
⌘⇧R / double-click a tab | Rename tab — enter keeps it, esc cancels |
⌘D / ⌘⇧D | Split right / split down |
⌘] / ⌘[ | Focus next / previous pane |
⌘⇧] / ⌘⇧[ | Next / previous tab |
ctrl-tab / ctrl-⇧-tab | Next / previous tab |
⌘C / ⌘V | Copy selection / paste — an image if the clipboard holds one |
ctrl-V | Paste a clipboard image as a file path |
| drag & drop | Type the dropped files' paths at the prompt |
shift-enter | Newline instead of send |
⌘-click | Open the URL or path under the pointer |
⇧PageUp / ⇧PageDown | Scroll back / forward a page |
⇧Home / ⇧End | Top / bottom of the scrollback |
⇧-scroll | Scroll the scrollback even when a program has the mouse |
⌘K | Clear |
⌘= / ⌘- / ⌘0 | Font size |
⌘B | Show / hide the tab sidebar |
⌘, | Settings — esc closes |
Apart from ctrl-tab and the shift-scrolling keys outside full-screen
programs, every other key reaches the program untouched — ctrl-c,
ctrl-d, ctrl-z and friends included.
⌘, opens the settings screen; every change is written straight to
~/.config/botttle/settings.json. The file is plain JSON and can be edited by
hand — unknown and missing keys fall back to defaults.
| Key | Type | Default | Notes |
|---|---|---|---|
theme | string | "Botttle Dark" | Any name from Themes |
icon_style | "default" | "bright" | "default" | Default follows the theme's light or dark |
terminal_font_family | string | null | null | null picks the best monospace font installed |
terminal_font_size | number | 13.0 | 6–40 |
line_height | number | 1.4 | Multiple of the font size, 1.0–2.5 |
ligatures | bool | true | Programming ligatures, where the font has them |
ui_font_family | string | null | null | Tabs, status bar, settings |
ui_font_size | number | 12.0 | 8–24 |
background | string | null | null | "#rrggbb" override for the window and terminal grounds |
opacity | number | 1.0 | 0.3–1.0; below 1 the desktop shows through |
blur | bool | false | Frost what is behind the window; needs opacity below 1 |
blur_radius | number | 20 | 1–64 points |
tab_layout | "horizontal" | "vertical" | "horizontal" | Strip across the top, or sidebar |
show_sidebar | bool |
Botttle, Gruvbox, One, Cursor, OpenCode, and VS Code, each in a light and a dark
variant — "Gruvbox Dark", "One Light", and so on. Gruvbox, One, and VS Code
use those projects' published terminal palettes; Cursor and OpenCode are
approximations matched by eye.
A background override replaces the window and terminal grounds while leaving the chrome on the theme's own surfaces, so the tab strip stays readable.
The grid is drawn as styled text, row by row, with per-cell colors and
attributes applied as text highlights, which keeps the terminal inside GPUI's
normal layout and paint path rather than beside it. Each row is split into
segments sized in whole cells — runs of ASCII, and runs of anything else — so a
glyph from a fallback font can't shift the columns after it. Emulation runs on its own
thread — alacritty_terminal owns the PTY and the parser — and reaches the UI
thread over a channel, so a program flooding stdout can't stall the window.
crates/botttle/src
├── main.rs window setup, cascading, and app wiring
├── workspace.rs root view: titlebar, tabs and sidebar, renaming, actions
├── pane.rs the pane tree — split, close, collapse, render
├── actions.rs actions and their default key bindings
├── menus.rs the macOS menu bar and Dock menu
├── glass.rs window transparency and blur
├── settings.rs user settings, persisted as JSON
├── settings_view.rs the settings screen
├── assets.rs the logo, compiled into the binary
├── theme/ palettes, fonts, sizing — resolved into one global
└── terminal/
├── mod.rs PTY + emulator, and the bridge to the main thread
├── view.rs grid rendering, keyboard, mouse, selection, links
├── keys.rs keystrokes to terminal byte sequences
├── hyperlink.rs finding the URL or path under the pointer, and OSC 8 links
├── shell.rs the login shell, and quoting paths for it
├── image_paste.rs clipboard images to files on disk
├── cwd.rs where a new pane starts
└── color.rs ANSI colors to GPUI colors
cargo run # debug build
cargo test # unit tests, plus an end-to-end pty test
cargo clippy --all-targets
scripts/bundle-macos.sh --debug # a .app around the debug binary
The test suite covers key encoding, link detection, row layout, theme resolution, settings round-trips, and working-directory lookup, and includes an end-to-end check that a real shell's output reaches the grid we render from.
site/index.html is the project page — a single self-contained file with the
logo and every asset inlined, so it can be served from anywhere:
python3 -m http.server --directory site
botttle stands on GPUI for rendering and windowing, and on
alacritty_terminal — Alacritty's
emulator, extracted as a library — for turning bytes into a grid.
MIT — see LICENSE.
true| With the sidebar layout |
glass_sidebar | bool | false | Let the blur show through the sidebar |
cursor_shape | "block" | "bar" | "underline" | "block" |
scrollback_lines | number | 10000 | Applies to panes opened afterwards |
paste_images | bool | true | ctrl-v writes a clipboard image to a file |
shift_enter_newline | bool | true | Send ESC CR for shift-enter |
copy_on_select | bool | true | Copy a selection as soon as it is made |