Source code: https://github.com/IsaacSchemm/Pandacap/
Features:
Some of the things Pandacap does not do:
Unlike traditional social media applications, Pandacap does not
use a single chronological infinite-scroll timeline. Instead, it
adopts an inbox paradigm, similar to existing feed readers and
art sharing sites:
Posts are also grouped under headings with the name and icon of
the user who posted them. (In the case of shared/boosted posts,
this is the name of the user who shared the post, not of the
post's original author.)
Pandacap also does not attempt to maintain a "whole known
network" view or provide any sort of search (by hashtag, for
example) that includes content from users other than the
instance owner.
Pandacap is an ASP.NET Core application written in a mix of
C# and F#. It's designed to be deployed to an Azure Web App,
with its own Cosmos DB NoSQL database, blob storage account,
and Key Vault. See the git
README for more information.
Authentication for the instance owner is determined by an
Entra app registration in Azure whose ID and secret are
present as configuration values in the Pandcap web app. Any
Microsoft account with the appropriate permissions on the
Entra app registration will be able to log in as the instance
owner (generally, you only want one such account). Pandacap's
ASP.NET Identity user store is separate from its main Cosmos
DB data store, and is kept in memory. (This means that upon
restart, Pandacap will prompt you again for a username when
you log in.)
Once logged in, you can use the ASP.NET Identity tools to
attach a DeviantArt or Reddit account; you won't be able to
use these accounts to log in (because the user store is
ephemeral), but doing so will establish API tokens for those
platforms and enable the corresponding integration.
The public-facing portion of Pandacap consists primarily of the
home page, the following page, and the user's posts and
favorites.
Pandacap has four kinds of user posts:
Favorites have a variety of sources: ActivityPub,
Bluesky, or RSS/Atom posts can be added to Favorites, and
DeviantArt, Fur Affinity, or Weasyl favorites are imported
periodically if an attached account is found. Upvotes of
top-level Reddit posts are also imported to the Favorites
section.
The remainder of Pandacap is accessible only to the instance
owner, and includes the notifications section and the inbox,
split into:
Inbox posts are stored in Pandacap's data store, while
notifications are fetched on demand when you visit the
Notifications page.
Pandacap supports a variety of protocols and platforms.
Posts from other users (whether in the inbox or in Favorites)
are shown with a color-coded badge indicating the site they
originated from; for example, ActivityPub instances (including threads.net
or bsky.brid.gy) are shown in hot pink,
while Bluesky PDSes are shown in blue and RSS and Atom feeds are
shown in light
orange.
Pandacap makes its Gallery and Text Posts pages available as
Atom and RSS feeds, and allows the instance owner to follow
Atom or RSS feeds, whose posts will show up in the appropriate
section of the inbox.
Podcasts are sent to their own inbox area, where Pandacap
will provide a pop-out media player with rudimentary
Chromecast support and an audio output device switcher, among
other features.
Pandacap implements ActivityPub S2S
(server-to-server) and hosts a single actor, at the same root
URL that hosts the home page (e.g. https://pandacap.example.com/).
Adding an ActivityPub post to your Favorites will show the
post on your Favorites page (as with other platforms), but it
is also equivalent to an ActivityPub Like. At this
time, Pandacap does not support sending other activities such
as Announce (boosting posts) or Dislike
(downvotes).
Incoming ActivityPub interactions, as well as replies to your
posts, appear in the Notifications section. Posts that mention
you (whether from users you follow or not) appear in
Notifications as well.
The current version Pandacap does not act as, or connect to,
an atproto PDS. Instead, it uses a combination of methods to
interact with the network directly without going through the
Bluesky AppView:
Pandacap's only use of Bluesky infrastructure is its CDN, for
showing thumbnails of posts on the public Favorites page.
When you add an atproto feed to Pandacap, you can choose
whether you want to include:
You can also choose whether to:
Pandacap connects to the DeviantArt
API. An OAuth connection can be established from the
"Hello" link in the navbar, using ASP.NET Identity. (The
account may not persist in the External Logins list, but
Pandacap will store the API credentials in its data store.)
All four types of user posts can be crossposted to DeviantArt
using a "Post to DeviantArt" on the post's page.
Pandacap will populate the inbox with artwork from users you
watch on DeviantArt (using the API-provided feed), and with
their journal entries and status updates (by querying each
user's profile, although users who have not logged in since
the last refresh will be skipped). It will also populate the
notifications section with your DeviantArt messages and notes,
and import your new DeviantArt favorites to its Favorites
section.
Pandacap connects to Fur Affinity through a combination of
scraping / form simulation and FAExport, using
browser cookies that you paste into a Pandacap configuation
page.
Artwork posts can be crossposted to Fur Affinity as submissions.
Pandacap will populate the inbox and notifications pages with
artwork, posts, and notifications from Fur Affinity's
notifications area. It will also import your new Fur Affinity
favorites to its Favorites section (although only posts that
appear on sfw.furaffinity.net
will be included, regardless of your own content settings).
When connected to a Reddit account, Pandacap will import
upvotes of top-level posts into the Favorites section. No
integration with the inbox or notification sections is
included, however.
Pandacap uses Weasyl API keys
and a combination of API endpoints and scraping / form
simulation.
Artwork posts can be crossposted to Weasyl as visual submissions.
Pandacap will populate the inbox and notifications pages with
artwork, posts, and notifications from Weasyl's notifications
area. It will also import submissions you add to your Weasyl
favorites into its own Favorites section, as long as they have
a "general" rating. (Importing characters or other submission
types into Favorites is not supported.)
Pandacap uses a PHP proxy for all Weasyl requests, since
Weasyl's IP address filters do not always allow requests from
Azure data centers.
Public status updates and journal entries
List of followed users and feeds
(sites for which Pandacap imports an extenal feed - i.e.
DeviantArt - are not included)
Favorite image posts - both native (ActivityPub, Bluesky, RSS)
and imported
Feed management / add new feeds
"Image posts" section of the inbox
(note the "select all" and "remove selected items" buttons
at the bottom of the page)
"Text posts" section of the inbox
"Podcasts" section of the inbox
Viewing an ActivityPub post
(logged-out users get redirected to the original server)
Viewing a Bluesky post
(logged-out users get redirected to bsky.app)