{"id":49540227,"url":"https://github.com/kalotrapezis/classsend2","last_synced_at":"2026-05-06T15:02:17.861Z","repository":{"id":355223587,"uuid":"1224353895","full_name":"kalotrapezis/ClassSend2","owner":"kalotrapezis","description":"A class managment project, successor of the classSend build from the ground up with a better disign than the original","archived":false,"fork":false,"pushed_at":"2026-05-02T13:34:26.000Z","size":2015,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-02T15:06:02.860Z","etag":null,"topics":["chat","classroom","control","teaching"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kalotrapezis.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"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}},"created_at":"2026-04-29T07:44:27.000Z","updated_at":"2026-05-02T13:14:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kalotrapezis/ClassSend2","commit_stats":null,"previous_names":["kalotrapezis/classsend2"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/kalotrapezis/ClassSend2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kalotrapezis%2FClassSend2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kalotrapezis%2FClassSend2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kalotrapezis%2FClassSend2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kalotrapezis%2FClassSend2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kalotrapezis","download_url":"https://codeload.github.com/kalotrapezis/ClassSend2/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kalotrapezis%2FClassSend2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32699302,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T08:33:17.875Z","status":"ssl_error","status_checked_at":"2026-05-06T08:33:17.221Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["chat","classroom","control","teaching"],"created_at":"2026-05-02T15:02:26.075Z","updated_at":"2026-05-06T15:02:17.848Z","avatar_url":"https://github.com/kalotrapezis.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ClassSend2\n\nA classroom management application for teachers and students, built with Go. Provides a terminal UI for real-time chat, student monitoring, screen lock, and classroom command dispatch over a local network.\n\n\u003e Successor to the original ClassSend, deployed in a real Greek classroom.\n\n---\n\u003cimg width=\"1184\" height=\"772\" alt=\"εικόνα\" src=\"https://github.com/user-attachments/assets/d3661cea-939f-4a49-a6bb-39deda6d58e7\" /\u003e\n\u003cimg width=\"516\" height=\"440\" alt=\"εικόνα\" src=\"https://github.com/user-attachments/assets/6321a067-a6b5-476f-95d7-2f52843bceba\" /\u003e\n\u003cimg width=\"673\" height=\"451\" alt=\"εικόνα\" src=\"https://github.com/user-attachments/assets/c83c376c-1b30-4d60-9931-7692496b0b87\" /\u003e\n\n\n## Features\n\n### Teacher\n- Real-time chat broadcast to all connected students\n- Student roster with online/offline status, IP, hand-up indicator, and mute state\n- **Commands** (`--t`): lock/unlock screen, mute/unmute audio, close apps, launch/focus app, capture screenshots, shutdown, start/stop monitoring, start/stop screen casting\n- **Monitoring grid** (`tvon`): live screenshot thumbnails from all student PCs in a Win32 grid window\n- **Screen casting** (`casting` / `cas`, stop: `casoff`, toggle: `^S`): broadcasts the teacher's screen as JPEG frames to all students in real time\n- Pin/unpin messages (`--pin` / `--upin`), delete messages (`--del`), report students (`--rem`)\n- Blacklist + whitelist overlay (`^L`) with fuzzy enforcement and import/export\n- File transfer (chunked, 32 KB frames) with zip-all download\n- Push-open: send a URL or file to open on all student machines (`push_open`)\n- Media library pin for shared resources\n- Tab completion, command history (↑/↓), input syntax highlighting\n\n### Student\n- Chat with teacher and class\n- `classsend-agent.exe` runs silently in the background (auto-started at login)\n- Student UI (`student.exe`) connects to the agent via local IPC; can be closed and reopened without dropping the session\n- Late-join message history replay\n- Amber monitoring notification banner (appears when teacher starts monitoring)\n- **Cast viewer**: resizable window (960×600) showing teacher's screen; `T` = toggle always-on-top, `F` = maximize, `X` = hide; reopen with `--cast`\n- **Blacklist enforcement**: messages containing blacklisted words (with fuzzy matching) are blocked before sending\n\n### Easter Eggs\n- `--coffee` — ☕ break reminder\n- `--matrix` — full-screen katakana rain (~4 s, 60 ms ticks)\n\n---\n\n## Architecture\n\n```\ncmd/classsend/              Teacher TUI + Student TUI (role baked in at build time)\ncmd/classsend-agent/        Student background agent (hidden Win32 process)\ncmd/monitoring/             Teacher-side screenshot grid (Win32 GUI)\ninternal/protocol/          Wire format, message types, command constants\ninternal/core/              App state, business logic, persistence\ninternal/ipc/               Agent ↔ TUI IPC over TCP loopback 127.0.0.1:14789\ninternal/tui/               Bubbletea model, Lipgloss styles, custom events\ninternal/network/           TCP server, client, scanner, NIC detection, probe\ninternal/monitoring/        Session orchestrator, named-pipe protocol\nsetup/classsend2.iss        Inno Setup 6 installer script\nbuild.bat                   Builds all four executables + installer\n```\n\n### Communication layers\n\n```\nTeacher TUI ──TCP──► Teacher server (internal/network/server.go)\n                           │\n                      broadcast/unicast\n                           │\n               ┌───────────▼───────────┐\n               │  classsend-agent.exe  │  (per student PC)\n               │  · TCP client         │\n               │  · System commands    │\n               │  · IPC server :14789  │\n               └───────────┬───────────┘\n                           │ local IPC\n                    student.exe (TUI)\n```\n\n---\n\n## Build\n\n**Requirements:** Go 1.24+ (main build), Go 1.20.14 at `C:\\Go120\\` (Win7 agent build), Windows, Inno Setup 6.\n\n```bat\nbuild.bat\n```\n\nOutput files:\n\n| File | Role | Notes |\n|---|---|---|\n| `teacher.exe` | Teacher PC | TUI; place `monitoring.exe` beside it |\n| `student.exe` | Student PCs | Chat TUI only |\n| `classsend-agent.exe` | Student PCs | Hidden background process |\n| `monitoring.exe` | Teacher PC | Screenshot grid |\n| `dist/ClassSend2-Setup-v0.0.2.exe` | All PCs | Inno Setup installer (Win7 SP1 – Win11) |\n\nRole is baked in at build time via `-ldflags=\"-X main.defaultRole=teacher\"` (or `student`).  \n`classsend-agent.exe` is built with `-H windowsgui` — no console window.\n\nThe installer bundles two agent binaries and selects at install time:\n- **Win10+ x64** → native 64-bit agent (Go 1.24+)\n- **Win7/8 or 32-bit** → 32-bit agent built with Go 1.20.14\n\n---\n\n## Installation\n\nRun `dist/ClassSend2-Setup-v0.0.2.exe` and choose a role:\n\n| Role | What gets installed | Auto-start |\n|---|---|---|\n| **Teacher** | `teacher.exe` + `monitoring.exe` | None |\n| **Student** | `student.exe` + `classsend-agent.exe` | Agent at login (HKCU Run) |\n| **Developer / Testing** | All four executables | Agent with `--dev` at login |\n\nThe Developer option is designed for single-machine testing: start Agent → start Teacher → start Student.\n\n**Minimum OS:** Windows 7 SP1 (32-bit or 64-bit).\n\n---\n\n## Data files\n\nStored in `%APPDATA%\\ClassSend\\`:\n\n| File | Contents |\n|---|---|\n| `messages.json` | Chat history (teacher-side) |\n| `lists.json` | Blacklist + whitelist |\n| `settings.json` | Nickname (per role) |\n\nDefault lists ship with 54 blacklist entries and 43 whitelist entries seeded from real classroom data.\n\n---\n\n## Key commands\n\n| Command | Effect |\n|---|---|\n| `--pin \u003cmsg\u003e` | Pin a message (broadcast) |\n| `--upin` | Unpin current message |\n| `--del @X.Y` | Delete a message |\n| `--rem @student` | Report/remove a student |\n| `--pass \u003ctext\u003e` | Broadcast a password/note |\n| `--black \u003cword\u003e` | Add word to blacklist |\n| `--blk @BN` | Remove blacklist entry by index |\n| `--wh \u003cword\u003e` | Add word to whitelist |\n| `--wh @WN` | Remove whitelist entry by index |\n| `--clr` / `--clr @s` | Clear chat / clear system messages only |\n| `--dl` | Download file; `--dl all` zips all |\n| `--a` | Open file picker attachment |\n| `--cp` | Copy pinned content |\n| `--op` | Open pinned file/URL |\n| `--t \u003ccmd\u003e` | Send system command (lock/unlock/mute/shot/tvon/tvoff/casting/casoff/…) |\n| `--set nickname \u003cname\u003e` | Set display name (persisted, synced to agent) |\n| `--set autostart on/off` | Enable/disable agent autostart |\n| `--set list import \u003cfile\u003e` | Import blacklist/whitelist |\n| `--set list export [file]` | Export blacklist/whitelist |\n| `--cast` *(student)* | Reopen cast viewer window if closed |\n\n**Keyboard shortcuts:**\n\n| Key | Action |\n|---|---|\n| `^S` | Toggle screen casting (teacher) |\n| `^T` | Tools overlay |\n| `^A` | File picker |\n| `^H` | Help overlay |\n| `^L` | Blacklist/Whitelist overlay (teacher) |\n| `↑` / `↓` | Command history |\n| `Tab` | Autocomplete command |\n\n**Cast viewer shortcuts (student window):**\n\n| Key | Action |\n|---|---|\n| `T` | Toggle always-on-top |\n| `F` | Toggle maximize / restore |\n| `X` | Hide window (cast continues) |\n\n---\n\n## Dependencies\n\n- [Bubbletea](https://github.com/charmbracelet/bubbletea) — TUI framework\n- [Lipgloss](https://github.com/charmbracelet/lipgloss) — terminal styling\n- [Bubbles](https://github.com/charmbracelet/bubbles) — TUI components\n- Windows `user32` / `kernel32` / `gdi32` (via `golang.org/x/sys/windows`) — system commands and GUI\n\n---\n\n## License\n\nClassSend2 is free software, released under the **GNU General Public License v3.0**.  \nSee [LICENSE](LICENSE) for the full terms.\n\nCopyright (C) 2025 Teo Kalotrapezis\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkalotrapezis%2Fclasssend2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkalotrapezis%2Fclasssend2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkalotrapezis%2Fclasssend2/lists"}