gitextract_ss1x8z9z/ ├── .eslintrc.js ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── stale.yml ├── .gitignore ├── .prettierrc ├── .travis.yml ├── Dockerfile ├── LICENSE ├── README.md ├── RSS.md ├── STYLE.md ├── api/ │ ├── Dockerfile │ ├── build.sh │ ├── config.yaml │ ├── docker-compose.yml │ ├── ecosystem.dev.config.js │ ├── now.json │ ├── package.json │ ├── scripts/ │ │ ├── docker-build.sh │ │ ├── docker-compose-aws.sh │ │ ├── docker-compose.sh │ │ └── make-build.sh │ ├── setup-tests.js │ ├── src/ │ │ ├── .babelrc │ │ ├── .prettierignore │ │ ├── asyncTasks.js │ │ ├── commands/ │ │ │ ├── _debug-feed.js │ │ │ ├── cleanup-follows.js │ │ │ ├── denormalize-follows.js │ │ │ ├── denormalize-pins.js │ │ │ ├── email.js │ │ │ ├── load-featured-feeds.js │ │ │ ├── rescrape-favicon.js │ │ │ ├── rescrape-og.js │ │ │ ├── reset-parsing-state.js │ │ │ ├── resync-follows.js │ │ │ ├── winds-article.js │ │ │ ├── winds-discover.js │ │ │ ├── winds-merge.js │ │ │ ├── winds-og.js │ │ │ ├── winds-podcast.js │ │ │ ├── winds-rebuild-search.js │ │ │ ├── winds-rehash.js │ │ │ ├── winds-rss.js │ │ │ ├── winds-truncate-rss-feed.js │ │ │ └── winds.js │ │ ├── config/ │ │ │ ├── dev.js │ │ │ ├── index.js │ │ │ ├── prod.js │ │ │ └── test.js │ │ ├── controllers/ │ │ │ ├── alias.js │ │ │ ├── article.js │ │ │ ├── auth.js │ │ │ ├── default.js │ │ │ ├── email.js │ │ │ ├── episode.js │ │ │ ├── featured.js │ │ │ ├── feed.js │ │ │ ├── folder.js │ │ │ ├── follow.js │ │ │ ├── health.js │ │ │ ├── listen.js │ │ │ ├── note.js │ │ │ ├── opml.js │ │ │ ├── pin.js │ │ │ ├── playlist.js │ │ │ ├── podcast.js │ │ │ ├── rss.js │ │ │ ├── tag.js │ │ │ └── user.js │ │ ├── fixtures/ │ │ │ └── featured.json │ │ ├── loadenv.js │ │ ├── models/ │ │ │ ├── alias.js │ │ │ ├── article.js │ │ │ ├── content.js │ │ │ ├── enclosure.js │ │ │ ├── episode.js │ │ │ ├── folder.js │ │ │ ├── follow.js │ │ │ ├── listen.js │ │ │ ├── note.js │ │ │ ├── pin.js │ │ │ ├── playlist.js │ │ │ ├── podcast.js │ │ │ ├── rss.js │ │ │ ├── tag.js │ │ │ └── user.js │ │ ├── parsers/ │ │ │ ├── content.js │ │ │ ├── detect-language.js │ │ │ ├── detect-type.js │ │ │ ├── discovery.js │ │ │ ├── feed.js │ │ │ └── og.js │ │ ├── routes/ │ │ │ ├── alias.js │ │ │ ├── article.js │ │ │ ├── auth.js │ │ │ ├── email.js │ │ │ ├── episode.js │ │ │ ├── featured.js │ │ │ ├── folder.js │ │ │ ├── follow.js │ │ │ ├── health.js │ │ │ ├── index.js │ │ │ ├── listen.js │ │ │ ├── note.js │ │ │ ├── opml.js │ │ │ ├── pin.js │ │ │ ├── playlist.js │ │ │ ├── podcast.js │ │ │ ├── rss.js │ │ │ ├── tag.js │ │ │ └── user.js │ │ ├── server.js │ │ ├── utils/ │ │ │ ├── analytics.js │ │ │ ├── basicAuth.js │ │ │ ├── blockedURLs.js │ │ │ ├── collections.js │ │ │ ├── controllers.js │ │ │ ├── db/ │ │ │ │ └── index.js │ │ │ ├── email/ │ │ │ │ ├── context.js │ │ │ │ ├── send.js │ │ │ │ └── templates/ │ │ │ │ ├── daily.ejs │ │ │ │ ├── followee.ejs │ │ │ │ ├── password.ejs │ │ │ │ ├── weekly.ejs │ │ │ │ └── welcome.ejs │ │ │ ├── errors.js │ │ │ ├── logger/ │ │ │ │ ├── index.js │ │ │ │ └── sentry.js │ │ │ ├── merge.js │ │ │ ├── personalization/ │ │ │ │ └── index.js │ │ │ ├── queue.js │ │ │ ├── random.js │ │ │ ├── rate-limiter.js │ │ │ ├── sanitize.js │ │ │ ├── search/ │ │ │ │ └── index.js │ │ │ ├── social.js │ │ │ ├── statsd.js │ │ │ ├── stream.js │ │ │ ├── upsert.js │ │ │ ├── urls.js │ │ │ ├── validation.js │ │ │ └── watchdog.js │ │ └── workers/ │ │ ├── conductor.js │ │ ├── og.js │ │ ├── podcast.js │ │ ├── rss.js │ │ ├── social.js │ │ ├── stream.js │ │ ├── winds-hackernews.js │ │ └── winds-queue-state-monitor.js │ ├── test/ │ │ ├── controllers/ │ │ │ ├── alias.js │ │ │ ├── article.js │ │ │ ├── auth.js │ │ │ ├── episode.js │ │ │ ├── featured.js │ │ │ ├── feed.js │ │ │ ├── folder.js │ │ │ ├── follow.js │ │ │ ├── health.js │ │ │ ├── listen.js │ │ │ ├── note.js │ │ │ ├── opml.js │ │ │ ├── pin.js │ │ │ ├── playlist.js │ │ │ ├── podcast.js │ │ │ ├── rss.js │ │ │ ├── tag.js │ │ │ └── user.js │ │ ├── data/ │ │ │ ├── 404.opml │ │ │ ├── discovery/ │ │ │ │ ├── case.html │ │ │ │ ├── fail.xml │ │ │ │ ├── index.html │ │ │ │ ├── nofavicon.html │ │ │ │ ├── nourl.xml │ │ │ │ └── rss.xml │ │ │ ├── feed/ │ │ │ │ ├── 90.cx │ │ │ │ ├── a16z │ │ │ │ ├── api.prprpr.me │ │ │ │ ├── apublica.org │ │ │ │ ├── audiworld.com │ │ │ │ ├── boingboing │ │ │ │ ├── bookshadow.com │ │ │ │ ├── dingxiaoyun555.blog.163.com │ │ │ │ ├── django │ │ │ │ ├── douban.com │ │ │ │ ├── empty │ │ │ │ ├── geektopia.es │ │ │ │ ├── habr │ │ │ │ ├── hackernews │ │ │ │ ├── hackernoon-daily-dev │ │ │ │ ├── kaiak.tw │ │ │ │ ├── kottke │ │ │ │ ├── lemonde │ │ │ │ ├── lobsters │ │ │ │ ├── lowendbox.com │ │ │ │ ├── malformed-hackernews │ │ │ │ ├── maxwell-land-surveying.com │ │ │ │ ├── medium-technology │ │ │ │ ├── perezhilton │ │ │ │ ├── reddit-r-programming │ │ │ │ ├── rss.cnki.net │ │ │ │ ├── ruby-on-rails │ │ │ │ ├── seattle.craigslist.org │ │ │ │ ├── shanzhuoboshi.com │ │ │ │ ├── sospc.name │ │ │ │ ├── straitstimes.com │ │ │ │ ├── strava │ │ │ │ ├── stream │ │ │ │ ├── techcrunch │ │ │ │ ├── tejiendoelmundo.wordpress.com │ │ │ │ ├── thewildeternal.com │ │ │ │ ├── tmz │ │ │ │ ├── torrentedigital.com │ │ │ │ ├── totoyao.wordpress.com │ │ │ │ ├── treehugger-latest │ │ │ │ ├── ttt.tt │ │ │ │ ├── xda-developers.com │ │ │ │ └── zhukun.net │ │ │ ├── not-a-url.opml │ │ │ ├── og/ │ │ │ │ ├── bildblog.html │ │ │ │ ├── google.html │ │ │ │ ├── kotaku.html │ │ │ │ ├── techcrunch.html │ │ │ │ ├── techcrunch_broken.html │ │ │ │ └── techcrunch_instagram.html │ │ │ ├── podcast-feed/ │ │ │ │ ├── a16z │ │ │ │ ├── atlantamonster │ │ │ │ ├── buffering-the-vampire-slayer │ │ │ │ ├── design-details │ │ │ │ ├── giant-bombcast │ │ │ │ ├── making-obama │ │ │ │ ├── nancy │ │ │ │ ├── serial │ │ │ │ ├── still-processing │ │ │ │ └── thehabitat │ │ │ └── test.xml │ │ ├── fixtures/ │ │ │ ├── aliases.json │ │ │ ├── articles.json │ │ │ ├── featured.json │ │ │ ├── folders.json │ │ │ ├── follows.json │ │ │ ├── initial-data.json │ │ │ ├── liked-shares.json │ │ │ ├── listens.json │ │ │ ├── merge-data.json │ │ │ ├── notes.json │ │ │ ├── opml.json │ │ │ ├── pins.json │ │ │ ├── playlists.json │ │ │ ├── tags.json │ │ │ ├── unstable-guid.json │ │ │ ├── user.json │ │ │ └── user_model.json │ │ ├── models/ │ │ │ └── user.js │ │ ├── parsers/ │ │ │ ├── content.js │ │ │ ├── discovery.js │ │ │ ├── feed.js │ │ │ ├── language.js │ │ │ └── og.js │ │ ├── server.js │ │ ├── utilities/ │ │ │ ├── collections.js │ │ │ ├── email.js │ │ │ ├── merge.js │ │ │ ├── random.js │ │ │ ├── rate-limiter.js │ │ │ ├── social.js │ │ │ ├── upsert.js │ │ │ ├── url.js │ │ │ └── validation.js │ │ ├── utils.js │ │ └── workers/ │ │ ├── conductor.js │ │ ├── og.js │ │ ├── podcast.js │ │ ├── rss.js │ │ ├── social.js │ │ └── stream.js │ └── test-entry.js ├── app/ │ ├── electron-builder.yaml │ ├── package.json │ ├── public/ │ │ ├── actions.js │ │ ├── electron.js │ │ ├── entitlements.mac.plist │ │ ├── entitlements.mas.plist │ │ ├── favicons/ │ │ │ └── icon.icns │ │ ├── index.html │ │ ├── info.plist │ │ ├── manifest.json │ │ └── preload.js │ ├── src/ │ │ ├── App.js │ │ ├── AppRouter.js │ │ ├── AuthedRoute.js │ │ ├── UnauthedRoute.js │ │ ├── api/ │ │ │ ├── folderAPI.js │ │ │ ├── index.js │ │ │ ├── noteAPI.js │ │ │ └── tagAPI.js │ │ ├── components/ │ │ │ ├── AddOPMLModal.js │ │ │ ├── AddPodcastModal.js │ │ │ ├── AddRSSModal.js │ │ │ ├── AliasModal.js │ │ │ ├── AllArticlesList.js │ │ │ ├── AllEpisodesList.js │ │ │ ├── ArticleListItem.js │ │ │ ├── Avatar/ │ │ │ │ └── index.js │ │ │ ├── BookmarkPanel.js │ │ │ ├── Drawer.js │ │ │ ├── EpisodeListItem.js │ │ │ ├── FeaturedItems.js │ │ │ ├── FeedHeader.js │ │ │ ├── FeedListItem.js │ │ │ ├── Folder/ │ │ │ │ ├── DeleteModal.js │ │ │ │ ├── FeedToFolderModal.js │ │ │ │ ├── Folder.js │ │ │ │ ├── FolderFeeds.js │ │ │ │ ├── FolderPanel.js │ │ │ │ ├── FolderPopover.js │ │ │ │ ├── IntroFolders.js │ │ │ │ ├── NewFolderModal.js │ │ │ │ ├── RenameModal.js │ │ │ │ └── SearchFeed.js │ │ │ ├── Header.js │ │ │ ├── HtmlRender.js │ │ │ ├── Loader.js │ │ │ ├── MediaCard.js │ │ │ ├── Notes/ │ │ │ │ ├── HighlightMenu.js │ │ │ │ ├── NoteInput.js │ │ │ │ └── RecentNotesPanel.js │ │ │ ├── Panel.js │ │ │ ├── Player.js │ │ │ ├── PodcastEpisode.js │ │ │ ├── PodcastEpisodesView.js │ │ │ ├── PodcastPanels/ │ │ │ │ ├── PodcastList.js │ │ │ │ ├── RecentEpisodesPanel.js │ │ │ │ ├── SuggestedPodcasts.js │ │ │ │ └── index.js │ │ │ ├── RSSArticle.js │ │ │ ├── RSSArticleList.js │ │ │ ├── RSSPanels/ │ │ │ │ ├── RecentArticlesPanel.js │ │ │ │ ├── RssFeedList.js │ │ │ │ ├── SuggestedFeeds.js │ │ │ │ └── index.js │ │ │ ├── SearchBar.js │ │ │ ├── SimpleProgressBar.js │ │ │ ├── Tabs.js │ │ │ ├── Tag/ │ │ │ │ ├── DeleteModal.js │ │ │ │ ├── RenameModal.js │ │ │ │ ├── Tag.js │ │ │ │ ├── TagFeeds.js │ │ │ │ ├── TagPanel.js │ │ │ │ └── TagView.js │ │ │ ├── TimeAgo/ │ │ │ │ └── index.js │ │ │ └── UserProfileSettingsDrawer.js │ │ ├── config.js │ │ ├── index.js │ │ ├── reducers.js │ │ ├── serviceWorker.js │ │ ├── static-data/ │ │ │ └── onboarding-topics.js │ │ ├── styles/ │ │ │ ├── base/ │ │ │ │ ├── _colors.scss │ │ │ │ ├── _normalize.scss │ │ │ │ ├── _typography.scss │ │ │ │ └── _vars.scss │ │ │ ├── components/ │ │ │ │ ├── _click-catcher.scss │ │ │ │ ├── _columns.scss │ │ │ │ ├── _comment-input-box.scss │ │ │ │ ├── _comment-section.scss │ │ │ │ ├── _content.scss │ │ │ │ ├── _episode-info-popover.scss │ │ │ │ ├── _feed-header.scss │ │ │ │ ├── _feed-list-item.scss │ │ │ │ ├── _follow-popover.scss │ │ │ │ ├── _github.scss │ │ │ │ ├── _hero-card.scss │ │ │ │ ├── _item-info.scss │ │ │ │ ├── _list.scss │ │ │ │ ├── _loader.scss │ │ │ │ ├── _media-card.scss │ │ │ │ ├── _panel-element.scss │ │ │ │ ├── _playlist-card.scss │ │ │ │ ├── _popover-panel.scss │ │ │ │ ├── _shows-grid.scss │ │ │ │ ├── _simple-progress-bar.scss │ │ │ │ └── _tiny-list.scss │ │ │ ├── elements/ │ │ │ │ ├── _buttons.scss │ │ │ │ ├── _drawer.scss │ │ │ │ ├── _forms.scss │ │ │ │ ├── _modals.scss │ │ │ │ ├── _popovers.scss │ │ │ │ └── _tabs.scss │ │ │ ├── framework/ │ │ │ │ ├── _app.scss │ │ │ │ ├── _player.scss │ │ │ │ ├── auth-views/ │ │ │ │ │ ├── _create.scss │ │ │ │ │ ├── _forgot-password.scss │ │ │ │ │ ├── _login.scss │ │ │ │ │ ├── _reset-password.scss │ │ │ │ │ └── _shared.scss │ │ │ │ └── dashboard/ │ │ │ │ └── _header.scss │ │ │ ├── global.scss │ │ │ ├── modules/ │ │ │ │ ├── _activity-feed.scss │ │ │ │ ├── _add-content.scss │ │ │ │ ├── _download.scss │ │ │ │ ├── _featured-items-section.scss │ │ │ │ ├── _follow-suggestions.scss │ │ │ │ ├── _my-playlists.scss │ │ │ │ ├── _notification-feed.scss │ │ │ │ ├── _podcast-suggestions.scss │ │ │ │ ├── _reshare-modal.scss │ │ │ │ ├── _rss-panels.scss │ │ │ │ ├── _search-results.scss │ │ │ │ ├── _share.scss │ │ │ │ ├── _social-icons.scss │ │ │ │ └── _user-settings-drawer.scss │ │ │ └── views/ │ │ │ ├── _404.scss │ │ │ ├── _admin.scss │ │ │ ├── _dashboard.scss │ │ │ ├── _folder.scss │ │ │ ├── _grid.scss │ │ │ ├── _note.scss │ │ │ ├── _onboarding.scss │ │ │ ├── _playlist.scss │ │ │ ├── _podcast.scss │ │ │ ├── _profile.scss │ │ │ └── _rss.scss │ │ ├── util/ │ │ │ ├── feeds.js │ │ │ ├── fetch/ │ │ │ │ └── index.js │ │ │ ├── getFeedActivities.js │ │ │ ├── getPlaceholderImageURL.js │ │ │ ├── pins.js │ │ │ └── social.js │ │ └── views/ │ │ ├── 404View.js │ │ ├── AdminView.js │ │ ├── Dashboard.js │ │ ├── FoldersView.js │ │ ├── PodcastsView.js │ │ ├── RSSFeedsView.js │ │ └── auth-views/ │ │ ├── Create.js │ │ ├── ForgotPassword.js │ │ ├── Login.js │ │ ├── ResetPassword.js │ │ └── index.js │ └── stylelint.config.js ├── process_dev.json └── scripts/ └── docker-cleanup.sh