TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Stay on top of your hybrid office attendance.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Plan and track your hybrid office days.
InOffice is a lightweight planner and tracker for hybrid workers. Set your office target, plan which days you'll go in, log what actually happened, and see what you need to meet your monthly goal. Use it as a guest and your attendance stays in your browser, or sign in with Google to keep it in sync across devices.README 전문 보기 ↗Plan and track your hybrid office days.
InOffice is a lightweight planner and tracker for hybrid workers. Set your office target, plan which days you'll go in, log what actually happened, and see what you need to meet your monthly goal. Use it as a guest and your attendance stays in your browser, or sign in with Google to keep it in sync across devices.
Use Node.js 22.22+ and pnpm 11.20.0. The pnpm version is pinned in package.json.
pnpm install --frozen-lockfile
pnpm dev
Open the local URL printed by Vite. The landing page offers Google or guest; setup then runs at /onboarding (guests are asked for a first name first).
| Command | Purpose |
|---|---|
pnpm dev | Start the local development server |
pnpm build | Build the production app into dist/ |
pnpm preview | Preview the production build locally |
pnpm test | Run calculation, validation, and storage tests |
pnpm typecheck | Type-check the project with TypeScript |
pnpm db:generate | Generate a SQL migration from server/db/schema.ts |
pnpm db:migrate | Apply pending migrations to the database in .env.local |
pnpm test:e2e | Run Playwright browser tests |
Install the browser before running end-to-end tests:
pnpm exec playwright install chromium
pnpm test:e2e
Browser tests cover onboarding, both target modes, calendar interactions, persistence, settings, backup import/export, resets, holiday fallback, responsive layouts, and signed-in sync, offline behaviour and first-sign-in import. They start their own dev server on port 5174 with an in-memory PGlite database and a test-only sign-in route, so they need no credentials and never touch real data. API tests (tests/api.test.ts) also run against PGlite. One test calls the live GOV.UK service and requires internet access. To use an existing Chromium installation, set PLAYWRIGHT_EXECUTABLE_PATH to its executable.
Guest mode needs no backend. Account features use a Supabase Postgres database through the API in server/. To work on them locally:
Link the project and pull its environment variables (or copy .env.example to .env.local and fill it in):
pnpm dlx vercel link
pnpm dlx vercel env pull .env.local
Apply migrations:
pnpm db:migrate
Sign-in uses Better Auth with Google. Create an OAuth client in Google Cloud Console with the redirect URI http://127.0.0.1:5173/api/auth/callback/google (and http://localhost:5173/... if you use that host), then set GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET. See .env.example for every variable.
pnpm dev serves the API from the Vite dev server; GET /api/health reports database connectivity. All InOffice tables, and the migration history, live in a dedicated inoffice Postgres schema. After changing server/db/schema.ts, run pnpm db:generate and commit the new file in drizzle/.
InOffice assumes a Monday–Friday working week.
Working days = Weekdays − Bank holidays − OOO days
Required office days = ceil(Working days × Target percentage / 100)
Remaining days = max(Required office days − Office days, 0)
For example, with 22 weekdays, one bank holiday, one OOO day, and a 50% target, you need 10 office days. If you have recorded six, you need four more.
A days-per-week target converts to a percentage of a five-day week: three office days per week becomes 60%. It is applied to the monthly calculation, rather than enforcing a separate weekly quota.
Select a weekday to cycle through:
Home → Office → OOO → Bank holiday → Home
Only weekdays count. Bank holidays and OOO days are excluded from working days. Manual entries take precedence over automatic bank holidays, including an explicit Home entry.
Future Office entries count toward the monthly total as planned attendance.
Forecasting is intentionally hidden for now. The existing forecast module remains in src/lib/forecast.ts so it can be reintroduced later when the experience is ready.
Holiday data comes from the GOV.UK bank holiday API. Responses are cached for seven days. Failed refreshes use cached data where available; holidays can also be marked manually.
The API covers a limited set of years. InOffice shows a notice when the selected year has no automatic holiday data.
Your first name, attendance records, preferences, setup completion, and the holiday cache are stored in LocalStorage, using these keys:
inoffice.settings.v1
inoffice.entries.v1
inoffice.holidays.v1
inoffice.profile.v1
Guest data belongs to the current browser and site origin. Clearing browser data or switching devices does not transfer your records; use JSON export/import to keep a backup or move them.
Signing in uses Google through Better Auth. InOffice stores your Google name, email address and profile picture URL, a session, and your settings and attendance entries in Postgres. Holiday data stays in the browser.
Every API route requires a valid session, scopes queries to that user, validates input with the same rules as the client, and rejects cross-site writes.
Imports are validated before confirmation and replacement. Exported backups contain attendance history, so avoid committing them to a public repository. Reset actions require confirmation; rerunning setup preserves attendance history.
The app also makes these network requests:
Legacy office-attendance.*.v1 data is migrated automatically when present on the same origin. Data from a local file:// page generally cannot be accessed from a hosted site.
Import the repository into Vercel using the Vite preset. The included vercel.json configures:
| Setting | Value |
|---|---|
| Install command | pnpm install --frozen-lockfile |
| Build command | pnpm run build |
| Output directory | dist |
Alternatively, deploy from the project directory:
pnpm dlx vercel
api/index.ts runs the Hono API as a Vercel Function; vercel.json rewrites /api/* to it and everything else (except assets and analytics) to the SPA.
Without any environment variables, InOffice deploys as a guest-only app: /api/config reports no sign-in provider and the sign-in UI stays hidden. To enable accounts:
POSTGRES_URL and POSTGRES_URL_NON_POOLING for any Postgres).pnpm db:migrate against that database.BETTER_AUTH_SECRET (openssl rand -base64 32), and GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET from a Google OAuth client whose redirect URI is https://<your-domain>/api/auth/callback/google.AUTH_ALLOWED_HOSTS.OAUTH_PROXY_SECRET in Preview and Production, and set AUTH_TRUSTED_ORIGINS in Production to a pattern matching only your own previews (for example https://inoffice-*-<team>.vercel.app). Previews then send Google to the production callback, which hands the session back encrypted. Only the production redirect URI needs registering with Google.To collect analytics, enable Web Analytics in the Vercel project and deploy. Custom-event availability depends on your Vercel plan. Analytics integration lives in src/lib/analytics.ts and is disabled during development.
public/ Icons, manifest and service worker
api/index.ts Vercel Function entry for /api/*
server/
app.ts Hono API routes
auth.ts Better Auth configuration
db/ Drizzle schema, client and migration runner
drizzle/ Generated SQL migrations
src/
main.tsx React entry point and service worker registration
App.tsx Providers, onboarding gate and routes
state/attendance.tsx AttendanceProvider and useAttendance() state hook
pages/ Calendar, year overview and settings screens
components/ App shell, calendar, summary, onboarding, install prompt
components/ui/ shadcn/ui components
lib/
types.ts Shared data types
storage.ts LocalStorage access and migration
validation.ts Stored data and backup validation
attendance.ts Pure monthly attendance calculations
forecast.ts Future remaining-day forecasts
holidays.ts GOV.UK fetching and cache handling
constants.ts Status and region definitions
analytics.ts Optional privacy-safe telemetry
styles.css Tailwind, shadcn theme and shared styles
tests/ Unit, API (PGlite) and browser tests
Built with Vite, React, TypeScript, Tailwind CSS and shadcn/ui (Base UI primitives).
Issues and pull requests are welcome. For a substantial change, open an issue first to discuss the approach.
pnpm install --frozen-lockfile.src/lib/ free of React so it stays unit-testable.pnpm typecheck, pnpm test and pnpm build; run browser tests when changing user flows.Use synthetic attendance data in screenshots, fixtures, and issue reports.
MIT © 2026 Love Akinlesi.