https://github.com/arielwernick/virtual_bookshelf
· scanned 2026-06-17 01:35 UTC (1 month, 2 weeks ago)
48 raw signals (0 security + 48 graph)
Last scanned 1 month, 2 weeks ago · v2 · last Δ -11.5 (diff) · 37 actionable findings from 1 signal source. 11 repeated signals grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.
All 862 nodes from the latest scan, grouped by kind. Each node is a unit the engine identified (file, function, endpoint, table…). Most users won't need this view — it's primarily for debugging the engine's graph extraction or for AI agents that want to enumerate the project structure.
| Label | Layer | Status | Path |
|---|---|---|---|
needsExternalApiRateLimit |
software | healthy | middleware.ts:needsExternalApiRateLimit |
middleware |
software | healthy | middleware.ts:middleware |
RootLayout |
software | healthy | app/layout.tsx:RootLayout |
getDemoShelvesData |
software | healthy | app/page.tsx:getDemoShelvesData |
Home |
software | healthy | app/page.tsx:Home |
DashboardPage |
software | healthy | app/dashboard/page.tsx:DashboardPage |
fetchDashboard |
software | healthy | app/dashboard/page.tsx:fetchDashboard |
handleCreateShelf |
software | healthy | app/dashboard/page.tsx:handleCreateShelf |
SharedShelfClient |
software | healthy | app/s/[shareToken]/SharedShelfClient.tsx:SharedShelfClient |
SharedShelfInteractive |
software | healthy | app/s/[shareToken]/SharedShelfInteractive.tsx:SharedShelfIn… |
itemCard |
software | healthy | app/s/[shareToken]/SharedShelfInteractive.tsx:itemCard |
ShelfNotFound |
software | healthy | app/s/[shareToken]/page.tsx:ShelfNotFound |
generateMetadata |
software | healthy | app/s/[shareToken]/page.tsx:generateMetadata |
getShelfData |
software | healthy | app/s/[shareToken]/page.tsx:getShelfData |
SharedShelfPage |
software | healthy | app/s/[shareToken]/page.tsx:SharedShelfPage |
ShelfPage |
software | healthy | app/shelf/[shelfId]/page.tsx:ShelfPage |
fetchData |
software | healthy | app/shelf/[shelfId]/page.tsx:fetchData |
EditShelfPage |
software | healthy | app/shelf/[shelfId]/edit/page.tsx:EditShelfPage |
fetchShelf |
software | healthy | app/shelf/[shelfId]/edit/page.tsx:fetchShelf |
handleSaveName |
software | healthy | app/shelf/[shelfId]/edit/page.tsx:handleSaveName |
handleSaveDescription |
software | healthy | app/shelf/[shelfId]/edit/page.tsx:handleSaveDescription |
handleDeleteItem |
software | healthy | app/shelf/[shelfId]/edit/page.tsx:handleDeleteItem |
handleReorder |
software | healthy | app/shelf/[shelfId]/edit/page.tsx:handleReorder |
handleSaveNote |
software | healthy | app/shelf/[shelfId]/edit/page.tsx:handleSaveNote |
handleDeleteShelf |
software | healthy | app/shelf/[shelfId]/edit/page.tsx:handleDeleteShelf |
LoginPageContent |
software | healthy | app/login/page.tsx:LoginPageContent |
getValidatedReturnUrl |
software | healthy | app/login/page.tsx:getValidatedReturnUrl |
handleGoogleSignIn |
software | healthy | app/login/page.tsx:handleGoogleSignIn |
handleChange |
software | healthy | app/login/page.tsx:handleChange |
handleSubmit |
software | healthy | app/login/page.tsx:handleSubmit |
LoginPage |
software | healthy | app/login/page.tsx:LoginPage |
getRedis |
software | healthy | app/api/finance/chart/route.ts:getRedis |
GET |
software | healthy | app/api/finance/chart/route.ts:GET |
quotes |
software | healthy | app/api/finance/chart/route.ts:quotes |
getRedis |
software | healthy | app/api/finance/quote/route.ts:getRedis |
logoUrlFromWebsite |
software | healthy | app/api/finance/quote/route.ts:logoUrlFromWebsite |
GET |
software | healthy | app/api/finance/quote/route.ts:GET |
website |
software | healthy | app/api/finance/quote/route.ts:website |
getRedis |
software | healthy | app/api/finance/news/route.ts:getRedis |
GET |
software | healthy | app/api/finance/news/route.ts:GET |
headlines |
software | healthy | app/api/finance/news/route.ts:headlines |
PATCH |
software | healthy | app/api/shelf/update-title/route.ts:PATCH |
GET |
software | healthy | app/api/shelf/dashboard/route.ts:GET |
GET |
software | healthy | app/api/shelf/share/[shareToken]/route.ts:GET |
POST |
software | healthy | app/api/shelf/update-description/route.ts:POST |
POST |
software | healthy | app/api/shelf/create/route.ts:POST |
GET |
software | healthy | app/api/shelf/[shelfId]/route.ts:GET |
PATCH |
software | healthy | app/api/shelf/[shelfId]/route.ts:PATCH |
DELETE |
software | healthy | app/api/shelf/[shelfId]/route.ts:DELETE |
createRequest |
software | healthy | app/api/shelf/[shelfId]/route.test.ts:createRequest |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
vitest.config.ts |
software | healthy | vitest.config.ts |
CLAUDE.md |
software | healthy | CLAUDE.md |
CONTRIBUTING.md |
software | healthy | CONTRIBUTING.md |
eslint.config.mjs |
software | healthy | eslint.config.mjs |
playwright.config.ts |
software | healthy | playwright.config.ts |
package-lock.json |
software | healthy | package-lock.json |
README.md |
software | healthy | README.md |
middleware.ts |
software | healthy | middleware.ts |
postcss.config.mjs |
software | healthy | postcss.config.mjs |
package.json |
software | healthy | package.json |
next.config.ts |
software | healthy | next.config.ts |
tsconfig.json |
software | healthy | tsconfig.json |
globals.css |
software | healthy | app/globals.css |
layout.tsx |
software | healthy | app/layout.tsx |
page.tsx |
software | healthy | app/page.tsx |
page.tsx |
software | healthy | app/dashboard/page.tsx |
SharedShelfClient.tsx |
software | healthy | app/s/[shareToken]/SharedShelfClient.tsx |
SharedShelfInteractive.tsx |
software | healthy | app/s/[shareToken]/SharedShelfInteractive.tsx |
page.tsx |
software | healthy | app/s/[shareToken]/page.tsx |
page.tsx |
software | healthy | app/shelf/[shelfId]/page.tsx |
page.tsx |
software | healthy | app/shelf/[shelfId]/edit/page.tsx |
page.tsx |
software | healthy | app/login/page.tsx |
route.ts |
software | healthy | app/api/finance/chart/route.ts |
route.ts |
software | healthy | app/api/finance/quote/route.ts |
route.ts |
software | healthy | app/api/finance/news/route.ts |
route.ts |
software | healthy | app/api/shelf/update-title/route.ts |
route.ts |
software | healthy | app/api/shelf/dashboard/route.ts |
route.ts |
software | healthy | app/api/shelf/share/[shareToken]/route.ts |
route.ts |
software | healthy | app/api/shelf/update-description/route.ts |
route.ts |
software | healthy | app/api/shelf/create/route.ts |
route.ts |
software | healthy | app/api/shelf/[shelfId]/route.ts |
route.test.ts |
software | healthy | app/api/shelf/[shelfId]/route.test.ts |
route.ts |
software | healthy | app/api/shelf/[shelfId]/reorder/route.ts |
route.tsx |
software | healthy | app/api/og/landing/route.tsx |
route.tsx |
software | healthy | app/api/og/[shareToken]/route.tsx |
route.ts |
software | healthy | app/api/auth/google/route.ts |
route.ts |
software | healthy | app/api/auth/google/callback/route.ts |
route.ts |
software | healthy | app/api/auth/debug/route.ts |
route.ts |
software | healthy | app/api/auth/login/route.ts |
route.test.ts |
software | healthy | app/api/auth/login/route.test.ts |
route.ts |
software | healthy | app/api/auth/signup/route.ts |
route.test.ts |
software | healthy | app/api/auth/signup/route.test.ts |
route.ts |
software | healthy | app/api/auth/me/route.ts |
route.ts |
software | healthy | app/api/auth/logout/route.ts |
route.ts |
software | healthy | app/api/search/books/route.ts |
route.ts |
software | healthy | app/api/search/episodes/route.ts |
route.test.ts |
software | healthy | app/api/search/episodes/route.test.ts |
route.ts |
software | healthy | app/api/search/episodes/in-show/route.ts |
route.ts |
software | healthy | app/api/search/music/route.ts |
route.ts |
software | healthy | app/api/items/route.ts |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
app |
software | healthy | app |
dashboard |
software | healthy | app/dashboard |
s |
software | healthy | app/s |
[shareToken] |
software | healthy | app/s/[shareToken] |
shelf |
software | healthy | app/shelf |
[shelfId] |
software | healthy | app/shelf/[shelfId] |
edit |
software | healthy | app/shelf/[shelfId]/edit |
login |
software | healthy | app/login |
api |
software | healthy | app/api |
finance |
software | healthy | app/api/finance |
chart |
software | healthy | app/api/finance/chart |
quote |
software | healthy | app/api/finance/quote |
news |
software | healthy | app/api/finance/news |
shelf |
software | healthy | app/api/shelf |
update-title |
software | healthy | app/api/shelf/update-title |
dashboard |
software | healthy | app/api/shelf/dashboard |
share |
software | healthy | app/api/shelf/share |
[shareToken] |
software | healthy | app/api/shelf/share/[shareToken] |
update-description |
software | healthy | app/api/shelf/update-description |
create |
software | healthy | app/api/shelf/create |
[shelfId] |
software | healthy | app/api/shelf/[shelfId] |
reorder |
software | healthy | app/api/shelf/[shelfId]/reorder |
og |
software | healthy | app/api/og |
landing |
software | healthy | app/api/og/landing |
[shareToken] |
software | healthy | app/api/og/[shareToken] |
auth |
software | healthy | app/api/auth |
google |
software | healthy | app/api/auth/google |
callback |
software | healthy | app/api/auth/google/callback |
debug |
software | healthy | app/api/auth/debug |
login |
software | healthy | app/api/auth/login |
signup |
software | healthy | app/api/auth/signup |
me |
software | healthy | app/api/auth/me |
logout |
software | healthy | app/api/auth/logout |
search |
software | healthy | app/api/search |
books |
software | healthy | app/api/search/books |
episodes |
software | healthy | app/api/search/episodes |
in-show |
software | healthy | app/api/search/episodes/in-show |
music |
software | healthy | app/api/search/music |
items |
software | healthy | app/api/items |
[id] |
software | healthy | app/api/items/[id] |
from-url |
software | healthy | app/api/items/from-url |
reorder |
software | healthy | app/api/items/reorder |
import |
software | healthy | app/api/import |
parse |
software | healthy | app/api/import/parse |
metadata |
software | healthy | app/api/import/metadata |
resolve |
software | healthy | app/api/import/resolve |
create |
software | healthy | app/api/import/create |
signup |
software | healthy | app/signup |
embed |
software | healthy | app/embed |
[shareToken] |
software | healthy | app/embed/[shareToken] |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
password_literal::app/api/auth/login/route.test.ts |
security | healthy | app/api/auth/login/route.test.ts |
password_literal::app/api/auth/login/route.test.ts |
security | healthy | app/api/auth/login/route.test.ts |
password_literal::app/api/auth/login/route.test.ts |
security | healthy | app/api/auth/login/route.test.ts |
password_literal::app/api/auth/login/route.test.ts |
security | healthy | app/api/auth/login/route.test.ts |
password_literal::app/api/auth/login/route.test.ts |
security | healthy | app/api/auth/login/route.test.ts |
password_literal::app/api/auth/login/route.test.ts |
security | healthy | app/api/auth/login/route.test.ts |
password_literal::app/api/auth/login/route.test.ts |
security | healthy | app/api/auth/login/route.test.ts |
password_literal::app/api/auth/login/route.test.ts |
security | healthy | app/api/auth/login/route.test.ts |
password_literal::app/api/auth/signup/route.test.ts |
security | healthy | app/api/auth/signup/route.test.ts |
password_literal::app/api/auth/signup/route.test.ts |
security | healthy | app/api/auth/signup/route.test.ts |
password_literal::app/api/auth/signup/route.test.ts |
security | healthy | app/api/auth/signup/route.test.ts |
password_literal::app/api/auth/signup/route.test.ts |
security | healthy | app/api/auth/signup/route.test.ts |
password_literal::app/api/auth/signup/route.test.ts |
security | healthy | app/api/auth/signup/route.test.ts |
password_literal::app/api/auth/signup/route.test.ts |
security | healthy | app/api/auth/signup/route.test.ts |
password_literal::app/api/auth/signup/route.test.ts |
security | healthy | app/api/auth/signup/route.test.ts |
password_literal::app/api/auth/signup/route.test.ts |
security | healthy | app/api/auth/signup/route.test.ts |
password_literal::app/api/auth/signup/route.test.ts |
security | healthy | app/api/auth/signup/route.test.ts |
password_literal::app/api/auth/signup/route.test.ts |
security | healthy | app/api/auth/signup/route.test.ts |
password_literal::app/api/auth/signup/route.test.ts |
security | healthy | app/api/auth/signup/route.test.ts |
password_literal::app/api/auth/signup/route.test.ts |
security | healthy | app/api/auth/signup/route.test.ts |
password_literal::scripts/seed-demo.deprecated.ts |
security | healthy | scripts/seed-demo.deprecated.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
password_literal::lib/constants/errors.ts |
security | healthy | lib/constants/errors.ts |
| Label | Layer | Status | Path |
|---|---|---|---|
db-migration-validation.ts |
data | healthy | test/db-migration-validation.ts |
MIGRATION_005_n1_query_optimization.sql |
data | healthy | lib/db/MIGRATION_005_n1_query_optimization.sql |
MIGRATION_002_top5_shelf.sql |
data | healthy | lib/db/MIGRATION_002_top5_shelf.sql |
MIGRATION_004_video_support.sql |
data | healthy | lib/db/MIGRATION_004_video_support.sql |
MIGRATION_004_link_type.sql |
data | healthy | lib/db/MIGRATION_004_link_type.sql |
MIGRATION_001_google_oauth.sql |
data | healthy | lib/db/MIGRATION_001_google_oauth.sql |
MIGRATION_003_podcast_episodes.sql |
data | healthy | lib/db/MIGRATION_003_podcast_episodes.sql |
MIGRATION_004_remove_top5.sql |
data | healthy | lib/db/MIGRATION_004_remove_top5.sql |
MIGRATION_006_stock_type.sql |
data | healthy | lib/db/MIGRATION_006_stock_type.sql |
002_schema_hardening.down.sql |
data | healthy | migrations/002_schema_hardening.down.sql |
001_initial_schema.down.sql |
data | healthy | migrations/001_initial_schema.down.sql |
001_initial_schema.sql |
data | healthy | migrations/001_initial_schema.sql |
002_schema_hardening.sql |
data | healthy | migrations/002_schema_hardening.sql |
| Label | Layer | Status | Path |
|---|---|---|---|
auth::app/signup/page.tsx |
security | healthy | app/signup/page.tsx |
auth::lib/utils/session.ts |
security | healthy | lib/utils/session.ts |
auth::README.md |
security | healthy | README.md |
auth::lib/utils/session.test.ts |
security | healthy | lib/utils/session.test.ts |
auth::docs/security-tasks/README.md |
security | healthy | docs/security-tasks/README.md |
auth::lib/utils/logger.ts |
security | healthy | lib/utils/logger.ts |
auth::app/api/auth/google/callback/route.ts |
security | healthy | app/api/auth/google/callback/route.ts |
auth::lib/utils/rateLimit.ts |
security | healthy | lib/utils/rateLimit.ts |
auth::app/login/page.tsx |
security | healthy | app/login/page.tsx |
auth::app/api/auth/google/route.ts |
security | healthy | app/api/auth/google/route.ts |
auth::lib/utils/logger.test.ts |
security | healthy | lib/utils/logger.test.ts |
auth::CLAUDE.md |
security | healthy | CLAUDE.md |
auth::lib/constants/errors.ts |
security | healthy | lib/constants/errors.ts |
| Label | Layer | Status | Path |
|---|---|---|---|
RootLayout |
frontend | healthy | app/layout.tsx |
DashboardPage |
frontend | healthy | app/dashboard/page.tsx |
ShelfPage |
frontend | healthy | app/shelf/[shelfId]/page.tsx |
EditShelfPage |
frontend | healthy | app/shelf/[shelfId]/edit/page.tsx |
LoginPage |
frontend | healthy | app/login/page.tsx |
SignupPage |
frontend | healthy | app/signup/page.tsx |
EmbedShelfPage |
frontend | healthy | app/embed/[shareToken]/page.tsx |
ImportPage |
frontend | healthy | app/import/page.tsx |
| Label | Layer | Status | Path |
|---|---|---|---|
9.504.5.092 |
network | healthy | app/page.tsx |
2.91.832.092 |
network | healthy | app/page.tsx |
2.651.64.7 |
network | healthy | app/page.tsx |
4.943.359.309 |
network | healthy | app/page.tsx |
268.18.58.688 |
network | healthy | app/page.tsx |
120.0.0.0 |
network | healthy | lib/utils/urlResolver.ts |
127.0.0.1 |
network | healthy | lib/utils/rateLimit.ts |
| Label | Layer | Status | Path |
|---|---|---|---|
/ |
frontend | healthy | app/api/auth/google/route.ts |
/login |
frontend | healthy | e2e/explore.spec.ts |
/signup |
frontend | healthy | e2e/explore.spec.ts |
/dashboard |
frontend | healthy | e2e/explore.spec.ts |
/import |
frontend | healthy | e2e/explore-auth.auth.spec.ts |
| Label | Layer | Status | Path |
|---|---|---|---|
ai-refinement |
cicd | healthy | .github/workflows/refine-idea.yml |
release |
cicd | healthy | .github/workflows/release.yml |
test |
cicd | healthy | .github/workflows/test.yml |
lint |
cicd | healthy | .github/workflows/test.yml |
build |
cicd | healthy | .github/workflows/test.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
postgresql |
data | healthy | CLAUDE.md |
redis |
data | healthy | middleware.ts |
postgres |
data | healthy | lib/db/migrate.ts |
| Label | Layer | Status | Path |
|---|---|---|---|
users |
data | healthy | lib/db/schema.sql |
shelves |
data | healthy | lib/db/schema.sql |
items |
data | healthy | lib/db/schema.sql |
| Label | Layer | Status | Path |
|---|---|---|---|
gha::refine-idea |
cicd | healthy | .github/workflows/refine-idea.yml |
gha::release |
cicd | healthy | .github/workflows/release.yml |
gha::test |
cicd | healthy | .github/workflows/test.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
MicrolinkQuotaExceededError |
software | healthy | lib/api/microlink.ts:MicrolinkQuotaExceededError |
Logger |
software | healthy | lib/utils/logger.ts:Logger |
| Label | Layer | Status | Path |
|---|---|---|---|
arielwernick__virtual_bookshelf |
software | healthy | /data/fable5_failed_archive/arielwernick__virtual_bookshelf |
| Label | Layer | Status | Path |
|---|---|---|---|
vps::aws |
hardware | healthy | lib/utils/urlResolver.test.ts |
| Label | Layer | Status | Path |
|---|---|---|---|
gpu (detected) |
hardware | healthy | lib/utils/textParser.integration.test.ts |
| Label | Layer | Status | Path |
|---|---|---|---|
GITHUB_TOKEN |
cicd | healthy | — |
This page is publicly accessible at:
https://repobility.com/scan/2153ce2e-aead-4cb0-b6d8-b1f48aaaf4bb/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/2153ce2e-aead-4cb0-b6d8-b1f48aaaf4bb/
Important — please don't re-submit the same URL repeatedly. The submission endpoint is idempotent: re-submitting the same git URL returns this same scan_token, not a new one. To re-scan this repo, sign up free and use the dashboard.