-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
167 lines (149 loc) · 13.7 KB
/
Copy pathindex.html
File metadata and controls
167 lines (149 loc) · 13.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="robots" content="noindex, nofollow">
<meta name="color-scheme" content="dark">
<meta name="theme-color" content="#0b0f17">
<title>Intelligence Hub</title>
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' rx='14' fill='%23111827'/%3E%3Cpath d='M18 18h8v28h-8zM38 18h8v28h-8z' fill='%23818cf8'/%3E%3C/svg%3E">
<link rel="stylesheet" href="styles.css">
<link rel="stylesheet" href="tabs.css">
<link rel="stylesheet" href="dashboard.css">
<link rel="stylesheet" href="social-source-policy.css">
</head>
<body>
<header id="app-topbar" class="app-topbar">
<button id="menu-toggle" class="app-topbar__menu button button--icon" type="button" aria-label="Open navigation" aria-controls="flyout-drawer" aria-expanded="false">
<i data-lucide="menu" aria-hidden="true"></i>
</button>
<span class="app-topbar__title">Intelligence Hub</span>
<span class="app-topbar__balance" aria-hidden="true"></span>
</header>
<div id="drawer-overlay" class="drawer-overlay" hidden>
<nav id="flyout-drawer" class="flyout-drawer" aria-label="Intelligence Hub navigation" hidden>
<div class="flyout-drawer__heading">Navigation</div>
<div id="primaryTabs" class="flyout-drawer__menu" role="tablist" aria-label="Intelligence Hub sections">
<button class="drawer-item primary-tab active" type="button" role="tab" data-primary-tab="myfeed" aria-selected="true">
<i data-lucide="home" aria-hidden="true"></i><span class="label">My Feed</span>
</button>
<button class="drawer-item primary-tab" type="button" role="tab" data-primary-tab="news" aria-selected="false" tabindex="-1">
<i data-lucide="newspaper" aria-hidden="true"></i><span class="label">News</span>
</button>
<button class="drawer-item primary-tab" type="button" role="tab" data-primary-tab="socials" aria-selected="false" tabindex="-1">
<i data-lucide="users" aria-hidden="true"></i><span class="label">Socials</span>
</button>
<button class="drawer-item primary-tab" type="button" role="tab" data-primary-tab="academic" aria-selected="false" tabindex="-1">
<i data-lucide="graduation-cap" aria-hidden="true"></i><span class="label">Academic</span>
</button>
<button class="drawer-item primary-tab" type="button" role="tab" data-primary-tab="research" aria-selected="false" tabindex="-1">
<i data-lucide="microscope" aria-hidden="true"></i><span class="label">Research</span>
</button>
<button class="drawer-item primary-tab" type="button" role="tab" data-primary-tab="video" aria-selected="false" tabindex="-1">
<i data-lucide="film" aria-hidden="true"></i><span class="label">Videos</span>
</button>
<button class="drawer-item primary-tab" type="button" role="tab" data-primary-tab="books" aria-selected="false" tabindex="-1">
<i data-lucide="book-open" aria-hidden="true"></i><span class="label">Books</span>
</button>
<button class="drawer-item primary-tab" type="button" role="tab" data-primary-tab="launchpad" aria-selected="false" tabindex="-1">
<i data-lucide="bookmark" aria-hidden="true"></i><span class="label">Bookmarks</span>
</button>
</div>
<div class="flyout-drawer__spacer" aria-hidden="true"></div>
<button class="drawer-item drawer-item--settings" id="settingsOpen" type="button" aria-haspopup="dialog">
<i data-lucide="settings" aria-hidden="true"></i><span class="label">Settings</span>
</button>
</nav>
</div>
<div id="main-content" data-view="feed">
<div class="shell">
<main class="workspace">
<section class="primary-panel" id="panel-launchpad" data-primary-panel="launchpad">
<div class="search-wrap">
<div class="search-panel">
<div class="search-field">
<svg class="search-icon" viewBox="0 0 24 24" fill="none" aria-hidden="true">
<circle cx="11" cy="11" r="7" stroke="currentColor" stroke-width="2"/>
<path d="m20 20-4-4" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
</svg>
<label for="search" class="sr-only">Search Launchpad</label>
<input id="search" class="search-input" type="search" autocomplete="off" spellcheck="false" placeholder="Search destinations, tools, sources…">
<span class="shortcut"><span class="kbd">/</span> or <span class="kbd">⌘K</span></span>
</div>
<div class="search-status" id="searchStatus" aria-live="polite">226 links</div>
</div>
<div class="view-switcher">
<div class="view-tabs" id="viewTabs" role="tablist" aria-label="Launchpad views">
<button class="view-tab" type="button" role="tab" data-view="destinations" aria-selected="true">
<span>Destinations</span><span class="view-tab-count">226</span>
</button>
<button class="view-tab" type="button" role="tab" data-view="watchlists" aria-selected="false" tabindex="-1">
<span>Watchlists</span><span class="view-tab-count">130</span>
</button>
</div>
<p class="view-description" id="viewDescription">Places to use, build, research, read, create, and publish.</p>
</div>
<nav class="nav-chips" id="navChips" aria-label="Launchpad category shortcuts"></nav>
</div>
<div class="legacy-control-hooks" hidden aria-hidden="true">
<span id="totalLinks">356</span>
<button id="faviconToggle" type="button" aria-label="Load favicons"><span id="faviconToggleLabel">Load favicons</span></button>
<button id="expandAll" type="button">Expand all</button>
<button id="collapseAll" type="button">Collapse all</button>
</div>
<div id="hub"></div>
<div class="empty-state" id="emptyState"><strong>No matches found.</strong>Try a broader term, a domain name, or the other Launchpad view.</div>
</section>
<section class="primary-panel feed-panel" id="panel-news" data-primary-panel="news" hidden>
<div class="feed-panel-header"><div><p class="panel-kicker">Last 24 hours</p><h2>News</h2><p>Google News query feeds merged into one high-signal timeline.</p></div><button class="btn" type="button" data-refresh-feed="news">Refresh</button></div>
<div class="feed-health" id="newsStatus" aria-live="polite">Open this tab to load.</div><div class="feed-list" id="newsFeed"></div>
</section>
<section class="primary-panel feed-panel" id="panel-socials" data-primary-panel="socials" hidden>
<div class="feed-panel-header"><div><p class="panel-kicker">Profiles & newsletters</p><h2>Socials</h2><p>Direct profile outlets plus optional profile-specific browser-local bridges. No platform scraping.</p></div><div class="feed-actions"><button class="btn" type="button" data-open-settings>Configure</button><button class="btn" type="button" data-refresh-feed="socials">Refresh</button></div></div>
<div class="feed-health" id="socialsStatus" aria-live="polite">Open this tab to load.</div><div class="timeline-list" id="socialsFeed"></div>
</section>
<section class="primary-panel feed-panel" id="panel-academic" data-primary-panel="academic" hidden>
<div class="feed-panel-header"><div><p class="panel-kicker">Institutional signal</p><h2>Academic</h2><p>Public publication feeds with metadata-only cards for paywalled sources.</p></div><button class="btn" type="button" data-refresh-feed="academic">Refresh</button></div>
<div class="feed-health" id="academicStatus" aria-live="polite">Open this tab to load.</div><div class="feed-list" id="academicFeed"></div>
</section>
<section class="primary-panel feed-panel" id="panel-research" data-primary-panel="research" hidden>
<div class="feed-panel-header"><div><p class="panel-kicker">Live papers</p><h2>Research</h2><p>Recent arXiv papers with client-side keyword pinning.</p></div><button class="btn" type="button" data-refresh-feed="research">Refresh</button></div>
<div class="feed-health" id="researchStatus" aria-live="polite">Open this tab to load.</div><div class="paper-list" id="researchFeed"></div>
</section>
<section class="primary-panel feed-panel" id="panel-video" data-primary-panel="video" hidden>
<div class="feed-panel-header"><div><p class="panel-kicker">Creator uploads</p><h2>Video</h2><p>Recent uploads from curated YouTube channel Atom feeds—no login or algorithmic homepage.</p></div><button class="btn" type="button" data-refresh-feed="video">Refresh</button></div>
<div class="feed-health" id="videoStatus" aria-live="polite">Open this tab to load.</div><div class="video-grid" id="videoFeed"></div>
</section>
<section class="primary-panel feed-panel" id="panel-books" data-primary-panel="books" hidden>
<div class="feed-panel-header"><div><p class="panel-kicker">Private · local token</p><h2>Books</h2><p>Recent Readwise highlights and clippings. Your API token remains in this browser.</p></div><div class="feed-actions"><button class="btn" type="button" data-open-settings>Configure</button><button class="btn" type="button" data-refresh-feed="books">Refresh</button></div></div>
<div class="feed-health" id="booksStatus" aria-live="polite">Add a Readwise token in Settings.</div><div class="highlight-list" id="booksFeed"></div>
</section>
</main>
<footer class="footer"><div><strong>Intelligence Hub</strong> · v9.1 · Static GitHub Pages dashboard</div><div class="footer-note">External links open in a new tab. Remote feed content is rendered as text, not trusted HTML.</div></footer>
</div>
</div>
<button class="back-top" id="backTop" type="button" aria-label="Back to top"><svg width="19" height="19" viewBox="0 0 24 24" fill="none"><path d="m6 15 6-6 6 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></button>
<dialog class="settings-dialog" id="settingsDialog" aria-labelledby="settingsTitle">
<form method="dialog" class="settings-card" id="settingsForm">
<div class="settings-heading"><div><p class="panel-kicker">Browser-only configuration</p><h2 id="settingsTitle">Settings</h2></div><button class="icon-btn" type="button" data-settings-close aria-label="Close settings">×</button></div>
<p class="settings-note">Values below are saved only to this site's <code>localStorage</code>. They are not committed to GitHub. localStorage is origin-scoped but not encrypted, so use this only on devices you trust.</p>
<section class="settings-section" aria-labelledby="socialBridgeHeading">
<div class="settings-section-heading"><span id="socialBridgeHeading">Social profile bridges</span><small>Optional per-profile feeds for identities whose main publishing outlet does not expose a reliable public feed.</small></div>
<div class="policy-legend" aria-label="Social source policy states">
<span class="policy-chip">Direct</span><span class="policy-chip">Bridge-eligible</span><span class="policy-chip">Coverage-only</span><span class="policy-chip">Watchlist</span>
</div>
<p class="settings-note">Only Bridge-eligible profiles appear below. A configured URL is attributed only to that canonical profile; Intelligence Hub never treats general coverage or another organization's feed as that person's authored Social stream.</p>
<p class="settings-warning" id="legacySocialFeedNotice" hidden>A legacy unified Social RSS URL is stored from an earlier version. v8.5 does not load it because it cannot be attributed reliably to a canonical profile. Saving Settings will remove that legacy value.</p>
<div class="bridge-mappings" id="socialProfileMappings"></div>
</section>
<label class="field"><span>Readwise API token</span><div class="secret-row"><input id="readwiseToken" name="readwiseToken" type="password" placeholder="Stored only in this browser" autocomplete="off"><button class="mini-btn" type="button" data-toggle-secret="readwiseToken">Show</button></div></label>
<label class="field"><span>Readwise lookback window</span><select id="readwiseDays" name="readwiseDays"><option value="7">7 days</option><option value="30" selected>30 days</option><option value="90">90 days</option><option value="365">1 year</option></select></label>
<label class="field"><span>Optional RSS2JSON API key</span><div class="secret-row"><input id="rss2jsonApiKey" name="rss2jsonApiKey" type="password" placeholder="Optional free-tier key" autocomplete="off"><button class="mini-btn" type="button" data-toggle-secret="rss2jsonApiKey">Show</button></div><small>Used only for public feeds when a source blocks cross-origin browser requests.</small></label>
<div class="settings-actions"><button class="btn danger-btn" type="button" id="settingsClear">Clear local settings</button><span class="settings-spacer"></span><button class="btn" type="button" data-settings-close>Cancel</button><button class="btn primary-btn" type="submit" value="default">Save settings</button></div>
</form>
</dialog>
<script src="data-destinations-1.js"></script><script src="data-destinations-2.js"></script><script src="data-destinations-3.js"></script><script src="data-watchlists-1.js"></script><script src="data-watchlists-2.js"></script><script src="app.js"></script>
<script type="module" src="js/dashboard.js"></script>
</body>
</html>