MCPcopy Index your code
hub / github.com/SimonHalvdansson/Harmonic-HN

github.com/SimonHalvdansson/Harmonic-HN @v3.0.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v3.0.2 ↗ · + Follow
2,873 symbols 9,332 edges 155 files 44 documented · 2%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Harmonic for Hacker News

Harmonic for Hacker News

A fully-featured, mature Hacker News client for Android with a focus on (material) design, polish, and customization.

Over nearly 6 years of development, Harmonic has been been accumulating features and relentlessly improving all of the hundreds of small interactions which make up the app. It is my main personal side project which I use daily and has over 100 000 downloads on Google Play. It is not meant as a display of the best code quality, but rather as the product of continuous iteration and pixel pushing.

Features

  • Full account functionality: log in, vote, comment, submit, favorites, see upvoted
  • Material 3 Expressive design with nice animations
  • Theming support and extensive customization options
  • A large collection of quality of life features such as reader mode, preview images, link previews and much more
  • Strong smooth performance

Contributing

If you would like to see a change in Harmonic, feel free to open an issue or create a PR. Historically, most PRs are merged and I might make some design changes to make sure Harmonic stays consistent. Try to stay within the general code style of the codebase but I make no claim that the current state is holy by any means. Harmonic is meant to be beautiful from the front more so than the back and user experience is king. With that said, PRs which clean up the code or improve structure are very welcome as well. When a PR adds a new user-facing feature, I will add that feature to the changelog after merging. If you do NOT want your name there, let me know by e.g., writing so in the PR.

AI-aided PRs

Using your favorite LLM workflow to create PRs is completely fine - anything that gets the job done. As always, still build the app (this should be hassle-free) and try out your changes to make sure they work properly before before submitting a PR.

Code

Harmonic is written in Java mainly with views, old-school Android style. With MDC-Android (Views) being end of life, there will be a need to migrate to Kotlin Compose at some point in the future. While you are welcome to contribute to that, don't be afraid of using views as long as the rest of the app does.

Get it on Google Play

Extension points exported contracts — how you extend this code

OnClickATagListener (Interface)
This listener can define what happens when the a tag is clicked [13 implementers]
app/src/main/java/org/sufficientlysecure/htmltextview/OnClickATagListener.java
FileDownloaderCallback (Interface)
(no doc) [8 implementers]
app/src/main/java/com/simon/harmonichackernews/utils/FileDownloader.java
GetterCallback (Interface)
(no doc) [8 implementers]
app/src/main/java/com/simon/harmonichackernews/network/ArchiveOrgUrlGetter.java
UserItemListCallback (Interface)
(no doc) [8 implementers]
app/src/main/java/com/simon/harmonichackernews/network/UserActions.java
StoryIdsCallback (Interface)
(no doc) [8 implementers]
app/src/main/java/com/simon/harmonichackernews/network/UserActions.java

Core symbols most depended-on inside this repo

getContext
called by 318
app/src/main/java/com/simon/harmonichackernews/StoryCacheController.java
put
called by 247
app/src/main/java/com/simon/harmonichackernews/utils/StoryPreviewImageMemoryCache.java
size
called by 162
app/src/main/java/com/simon/harmonichackernews/utils/HistoriesUtils.kt
get
called by 152
app/src/main/java/com/simon/harmonichackernews/utils/StoryPreviewImageMemoryCache.java
pxFromDpInt
called by 104
app/src/main/java/com/simon/harmonichackernews/utils/Utils.java
getString
called by 86
app/src/main/java/com/simon/harmonichackernews/utils/Utils.java
toString
called by 82
app/src/main/java/com/simon/harmonichackernews/data/Story.java
cancel
called by 78
app/src/main/java/com/simon/harmonichackernews/network/StoryPreviewImageLoader.java

Shape

Method 2,573
Class 200
Function 49
Interface 47
Enum 4

Languages

Java98%
TypeScript2%
Kotlin1%

Modules by API surface

app/src/main/java/com/simon/harmonichackernews/StoriesFragment.java210 symbols
app/src/main/java/com/simon/harmonichackernews/CommentsFragment.java180 symbols
app/src/main/java/com/simon/harmonichackernews/adapters/CommentsRecyclerViewAdapter.java167 symbols
app/src/main/java/com/simon/harmonichackernews/utils/SettingsUtils.java136 symbols
app/src/main/java/com/simon/harmonichackernews/CommentsWebViewController.java115 symbols
app/src/main/java/com/simon/harmonichackernews/utils/Utils.java114 symbols
app/src/main/java/com/simon/harmonichackernews/adapters/StoryRecyclerViewAdapter.java105 symbols
app/src/main/java/com/simon/harmonichackernews/utils/CollectedReferenceLinks.java73 symbols
app/src/main/java/com/simon/harmonichackernews/settings/StoryContentPreviewPreference.java71 symbols
app/src/main/java/com/simon/harmonichackernews/network/UserActions.java56 symbols
app/src/main/java/com/simon/harmonichackernews/CommentNavigationController.java54 symbols
app/src/main/java/com/simon/harmonichackernews/network/StoryPreviewImageLoader.java47 symbols

For agents

$ claude mcp add Harmonic-HN \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page