Scan timing: clone 19.65s · analysis 31.07s · 23.7 MB · GitHub API rate-limit (preflight)
https://github.com/ginoleeswan/hero
· scanned 2026-06-05 22:33 UTC (4 days, 8 hours ago)
· 10 languages
189 raw signals (93 security + 96 graph) 34th percentile · Typescript · medium (20-100K LoC) System graph score 73 (lower by 8)
Last scanned 4 days, 8 hours ago · v2 · 104 actionable findings from 2 signal sources. 37 repeated signals grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.
| Component | Sub-score | Weight | Contribution |
|---|---|---|---|
structure_score |
85.0 | 0.15 | 12.75 |
security_score |
59.4 | 0.25 | 14.85 |
testing_score |
53.0 | 0.20 | 10.60 |
documentation_score |
60.7 | 0.15 | 9.11 |
practices_score |
76.0 | 0.15 | 11.40 |
code_quality |
65.3 | 0.10 | 6.53 |
| Overall | 1.00 | 65.2 |
All 752 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 |
|---|---|---|---|
returns |
software | healthy | __tests__/lib/api.test.ts:returns |
errors |
software | healthy | __tests__/lib/api.test.ts:errors |
hero |
software | healthy | __tests__/lib/query/heroCache.test.ts:hero |
makeChain |
software | healthy | __tests__/lib/db/viewHistory.test.ts:makeChain |
opts |
software | healthy | __tests__/lib/db/heroes.categoryPage.test.ts:opts |
mapHero |
software | healthy | scripts/enrich-heroes.ts:mapHero |
main |
software | healthy | scripts/enrich-heroes.ts:main |
fetchCharacter |
software | healthy | scripts/enrich-comicvine.ts:fetchCharacter |
fetchIssueImage |
software | healthy | scripts/enrich-comicvine.ts:fetchIssueImage |
sleep |
software | healthy | scripts/enrich-comicvine.ts:sleep |
main |
software | healthy | scripts/enrich-comicvine.ts:main |
buildPrompt |
software | healthy | scripts/generate-portraits.ts:buildPrompt |
uploadToStorage |
software | healthy | scripts/generate-portraits.ts:uploadToStorage |
setPortraitUrl |
software | healthy | scripts/generate-portraits.ts:setPortraitUrl |
fetchImageAsBase64 |
software | healthy | scripts/generate-portraits.ts:fetchImageAsBase64 |
describeCharacterVisually |
software | healthy | scripts/generate-portraits.ts:describeCharacterVisually |
json |
software | healthy | scripts/generate-portraits.ts:json |
generatePortraitImagen |
software | healthy | scripts/generate-portraits.ts:generatePortraitImagen |
callImageModel |
software | healthy | scripts/generate-portraits.ts:callImageModel |
generatePortrait |
software | healthy | scripts/generate-portraits.ts:generatePortrait |
withConcurrency |
software | healthy | scripts/generate-portraits.ts:withConcurrency |
worker |
software | healthy | scripts/generate-portraits.ts:worker |
priorityOrder |
software | healthy | scripts/generate-portraits.ts:priorityOrder |
phase2 |
software | healthy | scripts/generate-portraits.ts:phase2 |
main |
software | healthy | scripts/generate-portraits.ts:main |
NOOP |
software | healthy | __mocks__/react-native-reanimated.js:NOOP |
ID |
software | healthy | __mocks__/react-native-reanimated.js:ID |
IMMEDIATE_CALLBACK_INVOCATION |
software | healthy | __mocks__/react-native-reanimated.js:IMMEDIATE_CALLBACK_INV… |
useSharedValue |
software | healthy | __mocks__/react-native-reanimated.js:useSharedValue |
withSpring |
software | healthy | __mocks__/react-native-reanimated.js:withSpring |
withTiming |
software | healthy | __mocks__/react-native-reanimated.js:withTiming |
withSequence |
software | healthy | __mocks__/react-native-reanimated.js:withSequence |
withDelay |
software | healthy | __mocks__/react-native-reanimated.js:withDelay |
NOOP |
software | healthy | __mocks__/react-native-reanimated-mock-shim.js:NOOP |
ID |
software | healthy | __mocks__/react-native-reanimated-mock-shim.js:ID |
IMMEDIATE_CALLBACK_INVOCATION |
software | healthy | __mocks__/react-native-reanimated-mock-shim.js:IMMEDIATE_CA… |
useSharedValue |
software | healthy | __mocks__/react-native-reanimated-mock-shim.js:useSharedVal… |
withSpring |
software | healthy | __mocks__/react-native-reanimated-mock-shim.js:withSpring |
withTiming |
software | healthy | __mocks__/react-native-reanimated-mock-shim.js:withTiming |
withSequence |
software | healthy | __mocks__/react-native-reanimated-mock-shim.js:withSequence |
withDelay |
software | healthy | __mocks__/react-native-reanimated-mock-shim.js:withDelay |
WebAuthGate |
software | healthy | app/_layout.web.tsx:WebAuthGate |
WebRootLayout |
software | healthy | app/_layout.web.tsx:WebRootLayout |
Index |
software | healthy | app/index.tsx:Index |
AuthGate |
software | healthy | app/_layout.tsx:AuthGate |
atRoot |
software | healthy | app/_layout.tsx:atRoot |
RootLayout |
software | healthy | app/_layout.tsx:RootLayout |
Sk |
software | healthy | app/biography/[id].web.tsx:Sk |
BiographySkeleton |
software | healthy | app/biography/[id].web.tsx:BiographySkeleton |
SidebarSkeleton |
software | healthy | app/biography/[id].web.tsx:SidebarSkeleton |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
metro.config.js |
software | warning | metro.config.js |
babel.config.js |
software | warning | babel.config.js |
.mcp.json |
software | healthy | .mcp.json |
vercel.json |
software | healthy | vercel.json |
README.md |
software | healthy | README.md |
CLAUDE.md |
software | healthy | CLAUDE.md |
jest.setup.env.js |
software | warning | jest.setup.env.js |
eas.json |
software | healthy | eas.json |
package.json |
software | healthy | package.json |
app.config.ts |
software | warning | app.config.ts |
react-native.config.js |
software | warning | react-native.config.js |
.env.example |
software | healthy | .env.example |
tsconfig.json |
software | healthy | tsconfig.json |
.yarnrc.yml |
software | healthy | .yarnrc.yml |
CODE_OF_CONDUCT.md |
software | healthy | CODE_OF_CONDUCT.md |
carousel.html |
software | healthy | carousel.html |
sanity.test.ts |
software | warning | __tests__/sanity.test.ts |
powerIcons.test.ts |
software | warning | __tests__/constants/powerIcons.test.ts |
HeroCard.test.tsx |
software | warning | __tests__/components/HeroCard.test.tsx |
HeartButton.test.tsx |
software | warning | __tests__/components/HeartButton.test.tsx |
compare.test.ts |
software | warning | __tests__/lib/compare.test.ts |
heroImages.test.ts |
software | warning | __tests__/lib/heroImages.test.ts |
api.test.ts |
software | healthy | __tests__/lib/api.test.ts |
rivals.test.ts |
software | warning | __tests__/lib/rivals.test.ts |
heroCache.test.ts |
software | healthy | __tests__/lib/query/heroCache.test.ts |
viewHistory.test.ts |
software | healthy | __tests__/lib/db/viewHistory.test.ts |
heroes.categoryPage.test.ts |
software | healthy | __tests__/lib/db/heroes.categoryPage.test.ts |
heroes.test.ts |
software | warning | __tests__/lib/db/heroes.test.ts |
favourites.test.ts |
software | warning | __tests__/lib/db/favourites.test.ts |
categoryFilters.test.ts |
software | warning | __tests__/lib/db/categoryFilters.test.ts |
useCategoryFilters.test.ts |
software | warning | __tests__/hooks/useCategoryFilters.test.ts |
useAuth.test.ts |
software | warning | __tests__/hooks/useAuth.test.ts |
build.gradle |
software | healthy | android/build.gradle |
build.gradle |
software | healthy | android/app/build.gradle |
MainActivity.kt |
software | healthy | android/app/src/main/java/com/ginoswanepoel/hero/MainActivi… |
MainApplication.kt |
software | healthy | android/app/src/main/java/com/ginoswanepoel/hero/MainApplic… |
2026-04-04-hero-portrait-generation.md |
software | healthy | docs/superpowers/plans/2026-04-04-hero-portrait-generation.… |
2026-04-04-hero-db-enrichment.md |
software | healthy | docs/superpowers/plans/2026-04-04-hero-db-enrichment.md |
2026-06-01-category-filtering.md |
software | healthy | docs/superpowers/plans/2026-06-01-category-filtering.md |
2026-04-04-profile-redesign.md |
software | healthy | docs/superpowers/plans/2026-04-04-profile-redesign.md |
2026-04-05-topnav-redesign.md |
software | healthy | docs/superpowers/plans/2026-04-05-topnav-redesign.md |
2026-04-06-home-screen-takeover.md |
software | healthy | docs/superpowers/plans/2026-04-06-home-screen-takeover.md |
2026-04-12-comicvine-enrichment-v2.md |
software | healthy | docs/superpowers/plans/2026-04-12-comicvine-enrichment-v2.md |
2026-04-04-heart-animation.md |
software | healthy | docs/superpowers/plans/2026-04-04-heart-animation.md |
2026-04-04-web-version.md |
software | healthy | docs/superpowers/plans/2026-04-04-web-version.md |
2026-04-05-compare-feature.md |
software | healthy | docs/superpowers/plans/2026-04-05-compare-feature.md |
2026-04-12-abilities-section.md |
software | healthy | docs/superpowers/plans/2026-04-12-abilities-section.md |
2026-04-13-comicvine-catalog-expansion.md |
software | healthy | docs/superpowers/plans/2026-04-13-comicvine-catalog-expansi… |
2026-04-12-character-screen-enrichment.md |
software | healthy | docs/superpowers/plans/2026-04-12-character-screen-enrichme… |
2026-05-31-mature-search.md |
software | healthy | docs/superpowers/plans/2026-05-31-mature-search.md |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
__tests__ |
software | healthy | __tests__ |
constants |
software | healthy | __tests__/constants |
components |
software | healthy | __tests__/components |
lib |
software | healthy | __tests__/lib |
query |
software | healthy | __tests__/lib/query |
db |
software | healthy | __tests__/lib/db |
hooks |
software | healthy | __tests__/hooks |
android |
software | healthy | android |
app |
software | healthy | android/app |
src |
software | healthy | android/app/src |
main |
software | healthy | android/app/src/main |
java |
software | healthy | android/app/src/main/java |
com |
software | healthy | android/app/src/main/java/com |
ginoswanepoel |
software | healthy | android/app/src/main/java/com/ginoswanepoel |
hero |
software | healthy | android/app/src/main/java/com/ginoswanepoel/hero |
docs |
software | healthy | docs |
superpowers |
software | healthy | docs/superpowers |
plans |
software | healthy | docs/superpowers/plans |
specs |
software | healthy | docs/superpowers/specs |
scripts |
software | healthy | scripts |
__mocks__ |
software | healthy | __mocks__ |
app |
software | healthy | app |
biography |
software | healthy | app/biography |
category |
software | healthy | app/category |
(auth) |
software | healthy | app/(auth) |
character |
software | healthy | app/character |
compare |
software | healthy | app/compare |
[hero] |
software | healthy | app/compare/[hero] |
(tabs) |
software | healthy | app/(tabs) |
landing |
software | healthy | landing |
supabase |
software | healthy | supabase |
functions |
software | healthy | supabase/functions |
get-comicvine-hero |
software | healthy | supabase/functions/get-comicvine-hero |
delete-user |
software | healthy | supabase/functions/delete-user |
generate-hero-stats |
software | healthy | supabase/functions/generate-hero-stats |
generate-verdict |
software | healthy | supabase/functions/generate-verdict |
seed-comicvine-characters |
software | healthy | supabase/functions/seed-comicvine-characters |
email-templates |
software | healthy | supabase/email-templates |
migrations |
software | healthy | supabase/migrations |
.github |
software | healthy | .github |
workflows |
software | healthy | .github/workflows |
src |
software | healthy | src |
types |
software | healthy | src/types |
constants |
software | healthy | src/constants |
components |
software | healthy | src/components |
ui |
software | healthy | src/components/ui |
skeletons |
software | healthy | src/components/skeletons |
search |
software | healthy | src/components/search |
home |
software | healthy | src/components/home |
web |
software | healthy | src/components/web |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
WebRootLayout |
frontend | healthy | app/_layout.web.tsx |
Index |
frontend | healthy | app/index.tsx |
RootLayout |
frontend | healthy | app/_layout.tsx |
WebBiographyScreen |
frontend | healthy | app/biography/[id].web.tsx |
BiographyScreen |
frontend | healthy | app/biography/[id].tsx |
WebCategoryScreen |
frontend | healthy | app/category/[slug].web.tsx |
CategoryScreen |
frontend | healthy | app/category/[slug].tsx |
WebSignupScreen |
frontend | healthy | app/(auth)/signup.web.tsx |
LoginScreen |
frontend | healthy | app/(auth)/login.tsx |
WebLoginScreen |
frontend | healthy | app/(auth)/login.web.tsx |
AuthLayout |
frontend | healthy | app/(auth)/_layout.tsx |
WebForgotPasswordScreen |
frontend | healthy | app/(auth)/forgot-password.web.tsx |
ForgotPasswordScreen |
frontend | healthy | app/(auth)/forgot-password.tsx |
SignupScreen |
frontend | healthy | app/(auth)/signup.tsx |
WebCharacterScreen |
frontend | healthy | app/character/[id].web.tsx |
CharacterScreen |
frontend | healthy | app/character/[id].tsx |
WebPickOpponentScreen |
frontend | healthy | app/compare/[hero]/pick.web.tsx |
NativeCompareScreen |
frontend | healthy | app/compare/[hero]/[opponent].tsx |
WebCompareScreen |
frontend | healthy | app/compare/[hero]/[opponent].web.tsx |
PickOpponentScreen |
frontend | healthy | app/compare/[hero]/pick.tsx |
WebTabsLayout |
frontend | healthy | app/(tabs)/_layout.web.tsx |
WebHomeScreen |
frontend | healthy | app/(tabs)/explore.web.tsx |
WebProfileScreen |
frontend | healthy | app/(tabs)/profile.web.tsx |
ProfileScreen |
frontend | healthy | app/(tabs)/profile.tsx |
WebSearchScreen |
frontend | healthy | app/(tabs)/search.web.tsx |
TabLayout |
frontend | healthy | app/(tabs)/_layout.tsx |
SearchScreen |
frontend | healthy | app/(tabs)/search.tsx |
HomeScreen |
frontend | healthy | app/(tabs)/explore.tsx |
AnalyticsProvider |
frontend | healthy | src/components/Analytics.web.tsx |
AnalyticsProvider |
frontend | healthy | src/components/Analytics.tsx |
LandingPage |
frontend | healthy | src/components/landing/LandingPage.dom.tsx |
LandingPage |
frontend | healthy | src/components/landing/LandingPage.tsx |
| Label | Layer | Status | Path |
|---|---|---|---|
20260404120000_enrich_heroes.sql |
data | healthy | supabase/migrations/20260404120000_enrich_heroes.sql |
20260412130000_comicvine_v2.sql |
data | healthy | supabase/migrations/20260412130000_comicvine_v2.sql |
20260406000000_create_user_view_history.sql |
data | healthy | supabase/migrations/20260406000000_create_user_view_history… |
20260413120000_comicvine_expansion.sql |
data | healthy | supabase/migrations/20260413120000_comicvine_expansion.sql |
20260413000000_movies_jsonb.sql |
data | healthy | supabase/migrations/20260413000000_movies_jsonb.sql |
20260412120000_add_hero_powers.sql |
data | healthy | supabase/migrations/20260412120000_add_hero_powers.sql |
20260601120000_category_facets.sql |
data | healthy | supabase/migrations/20260601120000_category_facets.sql |
20260411000000_add_profile_media.sql |
data | healthy | supabase/migrations/20260411000000_add_profile_media.sql |
20260412140000_rename_cv_teams.sql |
data | healthy | supabase/migrations/20260412140000_rename_cv_teams.sql |
20260404120000_add_portrait_url.sql |
data | healthy | supabase/migrations/20260404120000_add_portrait_url.sql |
20260404000000_create_heroes_favourites_profiles.sql |
data | healthy | supabase/migrations/20260404000000_create_heroes_favourites… |
20260531000000_deduplicate_sh_cv_heroes.sql |
data | healthy | supabase/migrations/20260531000000_deduplicate_sh_cv_heroes… |
| Label | Layer | Status | Path |
|---|---|---|---|
user_view_history |
data | healthy | supabase/migrations/20260406000000_create_user_view_history… |
cv_ingestion_state |
data | healthy | supabase/migrations/20260413120000_comicvine_expansion.sql |
heroes |
data | healthy | supabase/migrations/20260404000000_create_heroes_favourites… |
user_favourites |
data | healthy | supabase/migrations/20260404000000_create_heroes_favourites… |
user_profiles |
data | healthy | supabase/migrations/20260404000000_create_heroes_favourites… |
| Label | Layer | Status | Path |
|---|---|---|---|
auth::app/(auth)/signup.tsx |
security | healthy | app/(auth)/signup.tsx |
auth::scripts/generate-portraits.ts |
security | healthy | scripts/generate-portraits.ts |
auth::src/hooks/useAuth.ts |
security | healthy | src/hooks/useAuth.ts |
auth::app/(auth)/login.tsx |
security | healthy | app/(auth)/login.tsx |
auth::supabase/functions/delete-user/index.ts |
security | healthy | supabase/functions/delete-user/index.ts |
| Label | Layer | Status | Path |
|---|---|---|---|
analyze |
cicd | healthy | .github/workflows/codeql-analysis.yml |
lint |
cicd | healthy | .github/workflows/ci.yml |
typecheck |
cicd | healthy | .github/workflows/ci.yml |
test |
cicd | healthy | .github/workflows/ci.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
3.29.87.78 |
network | healthy | src/components/landing/LandingPage.dom.tsx |
28.16.6.22 |
network | healthy | src/components/landing/LandingPage.dom.tsx |
31.09.6.29 |
network | healthy | src/components/landing/LandingPage.dom.tsx |
| Label | Layer | Status | Path |
|---|---|---|---|
gha::codeql-analysis |
cicd | healthy | .github/workflows/codeql-analysis.yml |
gha::ci |
cicd | healthy | .github/workflows/ci.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
repobility-clone-vhxxukot |
software | healthy | /tmp/repobility-clone-vhxxukot |
This page is publicly accessible at:
https://repobility.com/scan/d65872d5-1283-4b43-95c8-2d8d80982c15/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/d65872d5-1283-4b43-95c8-2d8d80982c15/
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.