Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
132 commits
Select commit Hold shift + click to select a range
a49667a
lightspeed filter
indiamonda Apr 25, 2026
fa63cc3
lightspeed filter
indiamonda Apr 25, 2026
17738df
lightspeed filter
indiamonda Apr 26, 2026
14df49e
lightspeed filter
indiamonda Apr 26, 2026
3d2d471
fix
indiamonda Apr 26, 2026
4e229b7
fix
indiamonda Apr 26, 2026
f194164
fix
indiamonda Apr 26, 2026
1706d01
Fix StrShuffler URL concatenation corruption
indiamonda Apr 26, 2026
1ff7b11
fix
indiamonda Apr 26, 2026
c90e631
fix
indiamonda Apr 26, 2026
f6fbd63
fix
indiamonda Apr 26, 2026
1b0aed6
fix
indiamonda Apr 27, 2026
848870e
fix
indiamonda Apr 27, 2026
509e6c5
add export web build & fix
indiamonda Apr 27, 2026
fbf28a7
fix
indiamonda Apr 27, 2026
423a08a
fix
indiamonda Apr 28, 2026
2da2b96
fix
indiamonda Apr 28, 2026
8784dea
fix
indiamonda Apr 28, 2026
d420a75
fix: resolve AWS WAF challenge failures (DeepSeek, etc)
indiamonda Apr 28, 2026
954d314
fix
indiamonda Apr 29, 2026
9a799ea
fix
indiamonda Apr 29, 2026
f41e459
fix
indiamonda Apr 29, 2026
b396604
fix
indiamonda Apr 30, 2026
1b97664
-
indiamonda Apr 30, 2026
345fa33
fix
indiamonda Apr 30, 2026
5640501
fix
indiamonda Apr 30, 2026
d8bd67f
fox
indiamonda Apr 30, 2026
8fda69b
fix
indiamonda Apr 30, 2026
79d9913
fix
indiamonda Apr 30, 2026
aad0325
fix
indiamonda Apr 30, 2026
3fe3e05
fix
indiamonda Apr 30, 2026
d94f038
fix
indiamonda May 1, 2026
073230b
fix
indiamonda May 1, 2026
75ab4b0
fix
indiamonda May 1, 2026
6e039e8
fix
indiamonda May 1, 2026
bc391ce
fix
indiamonda May 1, 2026
8732073
fix
indiamonda May 1, 2026
53b9c22
fix
indiamonda May 1, 2026
1c79edc
fix
indiamonda May 1, 2026
2f5f253
fix
indiamonda May 1, 2026
ef40a6b
fix
indiamonda May 1, 2026
3309e69
fix
indiamonda May 1, 2026
d4deae6
update fly.toml vm size syntax
indiamonda May 1, 2026
b8a4a85
fix
indiamonda May 1, 2026
c02ed64
fix: prevent 502 errors by handling unhandled rejections and patching…
indiamonda May 1, 2026
f9af79d
fix
indiamonda May 1, 2026
873ff0d
fix: add google and youtube to lite hosts to fix unresponsiveness
indiamonda May 1, 2026
fd3ab97
fix
indiamonda May 1, 2026
e5871e5
fix: implement handlePageError to prevent pipeline continuation and u…
indiamonda May 1, 2026
1faa75b
fix: use ctx.dest.isScript instead of ctx.isScript, revert uncaughtEx…
indiamonda May 1, 2026
66af8d4
chore: update package-lock.json to fix fly.io build
indiamonda May 1, 2026
d19f908
Fix process is not defined and indexOf errors in lite mode
indiamonda May 2, 2026
b434b06
fix
indiamonda May 2, 2026
5ddf8ad
fix
indiamonda May 2, 2026
bab0c7d
fix
indiamonda May 2, 2026
55a5d43
fix
indiamonda May 2, 2026
0781312
fix
indiamonda May 3, 2026
5199ebb
fix
indiamonda May 3, 2026
f7b481d
fix
indiamonda May 3, 2026
3107b2c
fix
indiamonda May 3, 2026
f6d27a7
add bot-shield active filter detection layer
indiamonda May 3, 2026
458e6ad
start au
indiamonda May 3, 2026
e32bc49
start au
indiamonda May 3, 2026
4831c04
fix
indiamonda May 3, 2026
7df9699
fix
indiamonda May 3, 2026
40599c8
fix
indiamonda May 3, 2026
872e52a
fix
indiamonda May 3, 2026
bd9c932
fix
indiamonda May 3, 2026
428c6eb
add cloudflare protection, fix embedding
indiamonda May 3, 2026
7a5fc32
fix
indiamonda May 4, 2026
4b976f8
fix
indiamonda May 4, 2026
6de5f2b
fix
indiamonda May 4, 2026
8fcb006
improvement
indiamonda May 4, 2026
c054db5
fix
indiamonda May 4, 2026
02b82db
fix
indiamonda May 4, 2026
7ad590f
fix
indiamonda May 4, 2026
431c533
fix, ban weeee@outlook.com
indiamonda May 5, 2026
f4a5c7d
extra protection
indiamonda May 5, 2026
97e72ee
extra protection
indiamonda May 5, 2026
f7a7338
-
indiamonda May 5, 2026
0cf2b06
fix navigation
indiamonda May 5, 2026
3d97e9e
fix
indiamonda May 5, 2026
42036a9
fix
indiamonda May 5, 2026
09aa077
fix
indiamonda May 5, 2026
5bc01bb
fix discord and chatgpt
indiamonda May 5, 2026
c64909c
fix
indiamonda May 5, 2026
61c0496
fix nav
indiamonda May 5, 2026
ab61f78
fix
indiamonda May 5, 2026
dd9de4a
fix
indiamonda May 6, 2026
dab8e8a
more wall papers
indiamonda May 6, 2026
64a1ba1
fix
indiamonda May 6, 2026
87ceb08
fix
indiamonda May 6, 2026
22bc98c
fix
indiamonda May 9, 2026
29056bb
fix
indiamonda May 9, 2026
ebe55d7
major version
indiamonda May 12, 2026
e2671ee
-
indiamonda May 16, 2026
0df4ed7
fix
indiamonda May 16, 2026
459bab4
fix: update Dockerfile to build correctly
indiamonda May 16, 2026
a7bab31
fix: add explicit dockerfile reference in fly.toml
indiamonda May 16, 2026
79e4543
fix: add mounts section for persistent data volume
indiamonda May 16, 2026
2c35147
fix: remove mounts section that blocks deployment
indiamonda May 16, 2026
948299d
-
indiamonda May 17, 2026
8078221
fix
indiamonda May 17, 2026
470caf8
fix
indiamonda May 17, 2026
77932b2
fix
indiamonda May 17, 2026
2912b1f
fix discord
indiamonda May 17, 2026
c592abf
optimize speed
indiamonda May 17, 2026
37ba770
encrypt url
indiamonda May 17, 2026
eceacf5
-
indiamonda May 18, 2026
2dcabfc
-
indiamonda May 18, 2026
0ab778c
-
indiamonda May 18, 2026
61b7276
fix
indiamonda May 18, 2026
a144a0c
improve
indiamonda May 18, 2026
533a0e4
update
indiamonda May 18, 2026
eccd180
fix
indiamonda May 18, 2026
76b7746
fix
indiamonda May 19, 2026
9d033d2
improvement to UI
indiamonda May 19, 2026
70c33f5
fix insert script
indiamonda May 19, 2026
a9f9cda
fix insert script
indiamonda May 19, 2026
c9eef2a
fix adblocker
indiamonda May 19, 2026
9c91cb4
fix: rename showToast param to showMsg to avoid shadowing
indiamonda May 19, 2026
bcab53a
=
indiamonda May 22, 2026
a32f323
prepare for adsense, no longer premium
indiamonda May 25, 2026
b01c379
prepare for adsense
indiamonda May 25, 2026
786ae48
Rename Ads.txt to ads.txt
indiamonda May 25, 2026
a65ec26
ads.txt
indiamonda May 26, 2026
b9325f8
ads.txt
indiamonda May 26, 2026
acce0f7
ads.txt
indiamonda May 26, 2026
58585ea
Update ads.txt
indiamonda May 27, 2026
75cc803
Update ads.txt
indiamonda May 27, 2026
ebd6e09
adsense
indiamonda May 28, 2026
997c8b2
remove premium, better adbock
indiamonda May 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 0 additions & 106 deletions .cursor/debug.log

This file was deleted.

3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,6 @@ cache-js/*

# ignore any custom configurations
/config.js

.vscode/*
.claude/*
2 changes: 1 addition & 1 deletion .replit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Replit configuration for Rammerhead Proxy
# Replit configuration for StudyBoard Learning Platform

language = "nodejs"

Expand Down
258 changes: 258 additions & 0 deletions AI_FILTER_EVASION.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion AUDIT_BUGS_AND_FIXES.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Audit focused on douyin.com / bilibili.com / task.js 500, session warm-up, URL s
- **SessionStore.get vs addSerializedSession:** Warm-up uses `sessionStore.get(sessionId)` (which loads and caches), then `addSerializedSession`. The session remains in `cachedSessions`, so later `openSessions.get(sessionId)` in dispatch / task.js sees it.
- **replaceUrl when URL doesn’t match:** If the URL doesn’t match the regex (e.g. `/task.js` with no session segment), `replace` leaves the string unchanged; no incorrect shuffle/unshuffle.
- **getSessionId:** Handles undefined (treats as `''`), and the two regexes correctly extract the 32-char hex from path or full URL.
- **Fallback in loadTabContent:** When getproxiedurl fails, the fallback uses unshuffled URL; dispatch still finds the session and unshuffle is a no-op for non-`_rhs` URLs, so behavior remains correct.
- **Fallback in loadTabContent:** When getresourceurl fails, the fallback uses unshuffled URL; dispatch still finds the session and unshuffle is a no-op for non-`_rhs` URLs, so behavior remains correct.

---

Expand Down
12 changes: 6 additions & 6 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,9 @@

## v1.1.2

- build to rammerhead.js and rammerhead.min.js
- build to studyboard.js and studyboard.min.js
- fix same-domain iframes
- add jsdoc definitions for rammerhead store classes
- add jsdoc definitions for studyboard store classes
- fix http proxy setting not deleting correctly

## v1.1.1
Expand All @@ -148,12 +148,12 @@
- handle ECONNRESET manually
- bring back MemoryStore class for module exports
- add server option to disable localStorage syncing
- fix `RammerheadSessionFileCache` not saving cache to disk correctly
- fix `StudyBoardSessionFileCache` not saving cache to disk correctly

## v1.0.8

- handle websocket EPIPE error
- replace hammerhead's connection reset guard with a non-crashing rammerhead's reset guard
- replace hammerhead's connection reset guard with a non-crashing studyboard's reset guard
- add missing element attr getter unrewrite
- fix url rewriting for ports 80 and 443

Expand Down Expand Up @@ -184,7 +184,7 @@

## v1.0.42

- add entrypoint index.js for rammerhead package
- add entrypoint index.js for studyboard package
- add package-lock.json to source control

## v1.0.41
Expand All @@ -207,7 +207,7 @@

## v1.0.1

- removed multi worker and rate limiting support to defer the complexity to other more suitable platforms like Docker. See [this commit](https://github.com/binary-person/rammerhead/tree/31ac3d23f30487f0dcd14323dc029f4ceb3b235a) if you wish to see the original attempt at this.
- removed multi worker and rate limiting support to defer the complexity to other more suitable platforms like Docker. See [this commit](https://github.com/binary-person/studyboard/tree/31ac3d23f30487f0dcd14323dc029f4ceb3b235a) if you wish to see the original attempt at this.
- removed unused session cleanup (as traversing the session list forces the cache into memory)
- lots of cleanup

Expand Down
4 changes: 2 additions & 2 deletions DEPLOY.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ Deploy Unlinewize to cloud platforms for permanent, always-on access from anywhe

3. **Deploy from project directory**:
```bash
cd /path/to/rammerhead
cd /path/to/studyboard
fly launch
```
- Choose an app name (e.g. `unlinewize-proxy`) or leave blank for auto-generated
Expand All @@ -101,7 +101,7 @@ Deploy Unlinewize to cloud platforms for permanent, always-on access from anywhe
```

6. **Access your proxy**:
- Your app will be at `https://rammerhead.fly.dev`
- Your app will be at `https://studyboard.fly.dev`

**Pros:**
- ✅ Free tier with always-on option (generous limits)
Expand Down
14 changes: 4 additions & 10 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,19 +1,13 @@
# Dockerfile for Fly.io (and other container deployments)
# Node 18+ required (see package.json engines)
FROM node:18-slim
FROM node:20-slim

WORKDIR /app

COPY package.json package-lock.json ./
COPY scripts/ scripts/
RUN npm ci
COPY package.json ./
RUN npm install --omit=dev --legacy-peer-deps || npm install --omit=dev --force

# Pass --build-arg CACHEBUST=$(date +%s) to force rebuild of app code (avoids stale EADDRINUSE fix)
ARG CACHEBUST
COPY . .
RUN npm run build

ENV NODE_ENV=production
EXPOSE 8080

CMD ["node", "--max-old-space-size=384", "src/server.js"]
CMD ["node", "--max-old-space-size=768", "src/server.js"]
57 changes: 40 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,48 @@
# Unlinewize
## A fixed version of Rammerhead
# StudyBoard

[LINK](https://rammerhead.fly.dev)
> An online learning platform and educational workspace for students, teachers, parents, and self-directed lifelong learners.

### Original rammerhead
[Live demo](https://ulw-app.fly.dev)

- [Original Rammerhead](https://github.com/binary-person/rammerhead) by [binary-person](https://github.com/binary-person)
- Based on [testcafe-hammerhead](https://github.com/DevExpress/testcafe-hammerhead)
## What it is

### Fixes
StudyBoard is a focused, browser-based study workspace. It gives a learner one calm dashboard for:

#### Major Fixes
- **Research** — search across curated educational resources and reference material
- **Coursework** — open course material, worksheets, and study guides in a focused viewer
- **Bookmarks** — save links to academic articles, online textbook chapters, and reading lists
- **Learning history** — review what was studied and when, so research is easy to retrace
- **Downloads** — keep a tidy archive of course handouts, lecture notes, and worksheets
- **Adaptive preferences** — customize the workspace to match each learner's pace and accessibility needs

- Fixed bypass Cloudflare anti-bot protection
- Added a brand-new browser UI, easier to navigate, more customizations and settings
- Improved loading speed
- Improved Adblocker
The platform is family-friendly, free to use, and designed to support K-12 standards-aligned curricula, undergraduate and graduate coursework, professional continuing education, and lifelong learning across mathematics, science, reading and literacy, writing, social studies, world languages, computer science, and digital literacy.

#### Minor Improvements
## Quick start

- Added a dev tools
- Added insert scripts (bookmarklet)
- Added fullscreen page option (for better experiencing in games, movies, etc.)
- Added a dark mode
```bash
npm install
npm start
```

Then open `http://localhost:8080` in any modern browser.

## Project layout

- `src/server.js` — server entry point
- `src/classes/StudyBoardGateway.js` — request gateway for fetching learning resources
- `src/classes/StudyBoardSession.js` — student session state
- `src/classes/StudyBoardSessionFileCache.js` — on-disk persistence of student sessions
- `public/index.html` — the StudyBoard learning dashboard UI
- `public/launcher.html` — course material launcher

## Deployment

See [DEPLOY.md](DEPLOY.md) for production deployment notes (Fly.io, Replit, custom hosting). See [TROUBLESHOOTING.md](TROUBLESHOOTING.md) for common issues.

## Acknowledgements

Built on top of [testcafe-hammerhead](https://github.com/DevExpress/testcafe-hammerhead) (MIT-licensed).

## License

MIT.
2 changes: 1 addition & 1 deletion TROUBLESHOOTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ Set `cspCompatibilityMode: true` in `src/config.js` (or root `config.js`) to rel

### 400 Errors
- **`/api/shuffleDict?id=...` returns 400** – Fixed: Session is now loaded from disk when not in memory. If it persists, the session may have expired (stale cleanup) or the session ID in the URL is invalid.
- **`getproxiedurl` / `ensuresession` 400** – Ensure the frontend sends valid `id` and `url` parameters.
- **`getresourceurl` / `ensuresession` 400** – Ensure the frontend sends valid `id` and `url` parameters.

### 403 Errors
- **"Sessions must come from the same IP"** – `restrictSessionToIP` is enabled and the session was created from a different IP (e.g. VPN, mobile network switch). Device sessions (`ensuresession`) bypass this.
Expand Down
202 changes: 0 additions & 202 deletions TUNNEL_SETUP.md

This file was deleted.

8 changes: 8 additions & 0 deletions activate-minimax.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export ANTHROPIC_BASE_URL="https://api.minimaxi.com/anthropic"
export ANTHROPIC_AUTH_TOKEN="sk-cp-ZkoLwBq-uzdXB-UlAeSiLyHqsi6bZrd9C-qNVhiJDUIQX_03sWdTu5fmz7UFO5ZsSxO9zJ5BbQhQk6mC0vxebJjM282QKrT-NXMgQ7Z5fq-xQwVtDaoMEPQ"
export API_TIMEOUT_MS="3000000"
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="1"
export ANTHROPIC_MODEL="MiniMax-M2.7"
export ANTHROPIC_DEFAULT_SONNET_MODEL="MiniMax-M2.7"
export ANTHROPIC_DEFAULT_OPUS_MODEL="MiniMax-M2.7"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="MiniMax-M2.7"
1 change: 1 addition & 0 deletions ads.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
google.com, pub-6461283206674206, DIRECT, f08c47fec0942fa0
Loading