{"id":28889582,"url":"https://github.com/robbiebyrd/classicy","last_synced_at":"2026-04-21T03:05:23.450Z","repository":{"id":48793539,"uuid":"304706014","full_name":"robbiebyrd/classicy","owner":"robbiebyrd","description":"A collection of React components that make it easy to add a customizable Webtop to your app with a unique \u0026 retro look.","archived":false,"fork":false,"pushed_at":"2026-04-21T01:38:20.000Z","size":137527,"stargazers_count":133,"open_issues_count":5,"forks_count":24,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-21T02:25:54.159Z","etag":null,"topics":["macos-classic","nextjs","platinum","react","typescript","typescript-react"],"latest_commit_sha":null,"homepage":"https://classicy.ing/","language":"SCSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"npjg/classic.css","license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robbiebyrd.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["robbiebyrd"]}},"created_at":"2020-10-16T18:17:36.000Z","updated_at":"2026-04-21T01:38:22.000Z","dependencies_parsed_at":"2025-10-28T01:23:28.435Z","dependency_job_id":null,"html_url":"https://github.com/robbiebyrd/classicy","commit_stats":null,"previous_names":["robbiebyrd/classicy"],"tags_count":62,"template":false,"template_full_name":null,"purl":"pkg:github/robbiebyrd/classicy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiebyrd%2Fclassicy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiebyrd%2Fclassicy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiebyrd%2Fclassicy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiebyrd%2Fclassicy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robbiebyrd","download_url":"https://codeload.github.com/robbiebyrd/classicy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robbiebyrd%2Fclassicy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32074818,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T02:38:07.213Z","status":"ssl_error","status_checked_at":"2026-04-21T02:38:06.559Z","response_time":128,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["macos-classic","nextjs","platinum","react","typescript","typescript-react"],"created_at":"2025-06-21T00:10:05.393Z","updated_at":"2026-04-21T03:05:23.416Z","avatar_url":"https://github.com/robbiebyrd.png","language":"SCSS","readme":"# [Classicy](https://classicy.ing)\n\n##### Previously Platinum\n\nA UI framework using native CSS/JS replications of the Mac OS 8 interface components.\n\n[Just curious? Visit our website to learn more.](https://classicy.ing)\n\n## Demo\n\n### [See a demo here!](https://robbiebyrd.github.io/classicy/)\n\n## Building and running on localhost\n\nFirst install dependencies:\n\n```sh\nnpm install\n```\n\nTo create a production build:\n\n```sh\nnpm run build\n```\n\nTo create a development build:\n\n```sh\nnpm run dev\n```\n\n## Running\n\nTo run the example site locally (builds the package, links it into the example, and starts the example dev server):\n\n```sh\nnpm run preview\n```\n\nThen visit the site in your browser at http://localhost:3000.\n\n(For iterative package development you can also use `npm run dev`, which builds the source and links the package locally.)\n\n### Browser app — TimeMachine Proxy\n\nThe Browser app requires the [TimeMachine Web Proxy](https://hub.docker.com/r/robbiebyrd/time-machine-proxy) to fetch archived web pages. A Docker Compose setup is included in `example/timemachine/`:\n\n```sh\ncd example/timemachine\ncp .env.example .env   # adjust if needed\ndocker compose up -d\n```\n\nThe proxy runs on `http://localhost:8765` by default. Enable it in the Browser app under **File → Settings → Enable TimeMachine Proxy**.\n\n## Acknowledgements\n\n- New Dawn by [`Nathanael Gentry`](https://github.com/npjg)\n- Scrollbars of the Classic Mac OS by [`Jessica Stokes (@ticky)`](https://github.com/ticky)\n- `after-dark-css`, for the basic System 7.1.1 interface\n- [`flyer`](https://www.masswerk.at/flyer/), for further inspiration\n- Robin Casady, for releasing ChicagoFLF into the public domain\n- Apple, who maintains the copyright on the background patterns, icons and interface components\n\n## Features\n\n*Legend*\n\n|          |                     |                     |\n|:--------:|:-------------------:|:-------------------:|\n|    ✅     |         ℹ️          |         ⚠️          |\n| Complete | Partially complete. |    Experimental     |\n|          |                     | *Subject to change* |\n\n- Desktop\n    - ℹ️ The ubiquitous Finder\n    - Menubar\n        - ✅ System Menu\n        - ✅ App Switcher\n        - ✅ Widgets\n            - ✅ Date/Time\n            - ✅ Sound\n    - Icons\n        - ✅ App Shortcuts\n        - ✅ Cleanup\n        - Arrange By…\n- Sounds\n    - ✅ Sound Provider\n    - ✅ Load sound theme from JSON\n    - ✅ Audio Sprites support\n    - ℹ️ Sound Manager Control Panel\n        - ℹ️ Sound Event Handler\n            - ✅ Event dispatcher/player\n            - ℹ️ Automatic event intercept and play for known events (map audio sprites to events)\n- Appearance Manager Control Panel (Theme Manager)\n    - ✅ Appearance Manager Control Panel\n    - ✅ System\n        - ✅ Load theme from JSON\n        - ✅ System events for modifying theme\n    - UI\n        - ✅ Typography settings\n        - ✅ Measurement settings\n        - ✅ Desktop settings\n        - ✅ System colors\n        - ✅ Configurable color variables\n    - ✅ Color Theme-able components\n- App Template\n    - ⚠️ App Context/Event Handler\n    - App Switcher\n- Window\n    - Controls\n        - ✅ Zoom\n        - ✅ Resize\n        - ✅ Collapse\n        - ✅ Close\n        - Placard\n        - ✅ Header\n    - Dialog\n        - Modal\n            - Dialog\n                - ✅ Movable\n                - ✅ Non-movable\n            - Alert\n                - ✅ Movable\n                - Non-movable\n        - ✅ Modeless\n    - ✅ Standard\n- System\n    - ✅ File System\n        - ✅ Integrated into Finder.app\n- UI Components\n    - ✅ Text Input\n    - ✅ Text Area\n    - ✅ Button\n    - ✅ Tabs\n    - ✅ Radio Button\n    - ✅ Drop-down menu\n    - Multi-select menu\n    - ✅ Checkbox\n    - ✅ Bevel Button\n    - Slider\n    - Spinner\n    - ✅ Date Picker\n    - ✅ Time Picker\n    - ✅ Expandable (Disclosure)\n    - ✅ Fieldset\n    - ✅ Separator\n    - ✅ Progress\n    - ✅ Balloon Help (tooltip)\n    - Menu\n        - Contextual Menu\n        - Submenu\n    - Gallery Picker (Slider)\n    - Color Picker\n\n## Component Reference\n\nAll components are exported from the `classicy` package. Import them by name:\n\n```tsx\nimport { ClassicyWindow, ClassicyButton, ClassicyBalloonHelp } from 'classicy';\n```\n\n### Application Shell\n\n| Component | Description |\n|-----------|-------------|\n| `ClassicyDesktop` | Root desktop surface — icons, menu bar, wallpaper, drag-select |\n| `ClassicyDesktopMenuBar` | Top menu bar with system menu, app menu, and widget tray |\n| `ClassicyApp` | Application container. Props: `id`, `name`, `icon`, `defaultWindow` |\n| `ClassicyWindow` | Window chrome with title bar and controls. Props: `id`, `appId`, `title`, `closable`, `zoomable`, `collapsable`, `resizable`, `modal`, `initialSize`, `initialPosition`, `minimumSize` |\n| `ClassicyBoot` | Boot screen shown on first load |\n| `ClassicyAboutWindow` | Standard \"About This App\" dialog. Props: `appId`, `appName`, `appIcon` |\n\n### Inputs\n\n| Component | Description |\n|-----------|-------------|\n| `ClassicyButton` | Push button. Accepts children as label |\n| `ClassicyCheckbox` | Checkbox with optional label. Props: `checked`, `label`, `onChangeFunc` |\n| `ClassicyRadioInput` | Radio button group. Props: `label`, `options` (array of `{ label, value }`) |\n| `ClassicyInput` | Single-line text field. Props: `placeholder`, `value`, `onChangeFunc` |\n| `ClassicySpinner` | Numeric stepper (up/down arrows). Props: `value`, `min`, `max`, `step` |\n| `ClassicyPopUpMenu` | Drop-down selector. Props: `label`, `options` (array of `{ label, value }`), `value` |\n| `ClassicyDatePicker` | Date input with calendar picker. Props: `value`, `placeholder`, `onChangeFunc` |\n| `ClassicyTimePicker` | Time input with clock picker. Props: `value`, `placeholder`, `onChangeFunc` |\n\n### Text Editing\n\n| Component | Description |\n|-----------|-------------|\n| `ClassicyTextEditor` | Plain-text editor area. Props: `content`, `onChangeFunc` |\n| `ClassicyRichTextEditor` | Rich-text editor (bold, italic, lists). Props: `content`, `onChangeFunc` |\n\n### Layout \u0026 Structure\n\n| Component | Description |\n|-----------|-------------|\n| `ClassicyTabs` | Tabbed container. Children must be `ClassicyTab` items with a `title` prop |\n| `ClassicyDisclosure` | Collapsible section (expand/collapse). Props: `label`, `open` |\n| `ClassicyControlGroup` | Labeled fieldset grouping form controls. Props: `label` |\n| `ClassicyControlLabel` | Inline label for a control. Props: `label` |\n\n### Menus\n\n| Component | Description |\n|-----------|-------------|\n| `ClassicyMenu` | Drop-down menu used in the menu bar. Props: `id`, `title`, `menuChildren` |\n| `ClassicyContextualMenu` | Right-click context menu. Renders at pointer position |\n\n### Feedback \u0026 Display\n\n| Component | Description |\n|-----------|-------------|\n| `ClassicyProgressBar` | Determinate progress bar. Props: `value`, `max`, `label` |\n| `ClassicyBalloonHelp` | Mac OS 8-style speech-bubble tooltip. Wraps any element. Props: `content`, `title`, `position`, `delay` |\n| `ClassicyIcon` | System icon image with optional label. Props: `src`, `label` |\n\n### File System\n\n| Component | Description |\n|-----------|-------------|\n| `ClassicyFileBrowser` | File browser with icon and list views. Props: `path`, `onSelect` |\n\n### Media\n\n| Component | Description |\n|-----------|-------------|\n| `QuickTimeMovieEmbed` | Embedded QuickTime-style video player. Props: `url` |\n\n### Menu Bar Widgets\n\n| Component | Description |\n|-----------|-------------|\n| `ClassicyDesktopMenuWidgetTime` | Clock widget for the menu bar |\n| `ClassicyDesktopMenuWidgetSound` | Volume widget for the menu bar |\n\n---\n\n## Architecture\n### Component Organization\n\n* `\u003cClassicyDesktopProvider\u003e`\n    * `\u003cClassicyDesktop\u003e`\n        * `\u003cClassicyDesktopMenuBar\u003e`\n        * `\u003cClassicyDesktopIcon?\u003e`\n        * `\u003cYourClassicyApp\u003e`\n            * `\u003cClassicyAppContext\u003e`\n                * `\u003cClassicyApp\u003e`\n                    * `\u003cClassicyWindow?\u003e`\n                        * `\u003cClassicyUIControls?\u003e`\n                        * `\u003cOtherReactNodes?\u003e`\n\n### Events\n\n* `ClassicyDesktop`\n    * `ClassicyDesktopClick`\n    * `ClassicyDesktopDrag`\n    * `ClassicyDesktopSetBalloonHelp`\n\n* `ClassicySoundPlay`\n    * `ClassicyAlertSosumi`\n    * `ClassicyAlertWildEep`\n    * `ClassicyAlertIndigo`\n    * `ClassicyBeep`\n    * `ClassicyBoot`\n    * `ClassicyButtonClickDown`\n    * `ClassicyButtonClickUp`\n    * `ClassicyInputRadioClickDown`\n    * `ClassicyInputRadioClickUp`\n    * `ClassicyMenuClose`\n    * `ClassicyMenuItemClick`\n    * `ClassicyMenuItemHover`\n    * `ClassicyMenuOpen`\n    * `ClassicyWindowClose`\n    * `ClassicyWindowCollapse`\n    * `ClassicyWindowControlClickDown`\n    * `ClassicyWindowControlClickUp`\n    * `ClassicyWindowExpand`\n    * `ClassicyWindowFocus`\n    * `ClassicyWindowMoveIdle`\n    * `ClassicyWindowMoveMoving`\n    * `ClassicyWindowMoveStop`\n    * `ClassicyWindowOpen`\n    * `ClassicyWindowResizeIdle`\n    * `ClassicyWindowResizeResizing`\n    * `ClassicyWindowResizeStop`\n    * `ClassicyWindowZoomMaximize`\n    * `ClassicyWindowZoomMinimize`\n\n* `ClassicyDesktopIcon`\n    * `ClassicyDesktopClick`\n    * `ClassicyDesktopAltClick`\n    * `ClassicyDesktopDoubleClick`\n    * `ClassicyDesktopDrag`\n\n* `ClassicyApp`\n    * `ClassicyAppOpen`\n    * `ClassicyAppClose`\n    * `ClassicyAppHide`\n    * `ClassicyAppFocus`\n\n* `ClassicyWindow`\n    * `ClassicyWindowOpen`\n    * `ClassicyWindowClose`\n    * `ClassicyWindowZoom`\n    * `ClassicyWindowCollapse`\n    * `ClassicyWindowResize`\n    * `ClassicyWindowDrag`\n    * `ClassicyWindowFocus`\n    * `ClassicyWindowContentScroll`\n    * `ClassicyWindowContentClick`\n\n* `ClassicyMenu`\n    * `ClassicyMenuHover`\n    * `ClassicyMenuClick`\n    * `ClassicyMenuChange`\n\n# License\nThis software is provided free and in the public domain under [The Unlicense](https://unlicense.org/).\n","funding_links":["https://github.com/sponsors/robbiebyrd"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobbiebyrd%2Fclassicy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobbiebyrd%2Fclassicy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobbiebyrd%2Fclassicy/lists"}