About
Pandacap is a personal art gallery and follower application, built on ASP.NET Core and Azure.
Pandacap is a single-user application. Each Pandacap instance hosts:
- A public art gallery of the main user's posts (split between image posts on one hand, and text posts - journals and status updates - on the other)
- A private "inbox" of posts created or shared by users who the main user follows, accessible only to the main user after logging in (split between image posts, text posts, and shares)
Connections
DeviantArt
Public posts on Pandacap are created by manually importing them from the user's DeviantArt account. The user's DeviantArt follows are also a source of posts for the Pandacap private inbox; these are populated periodically (on a timer).
Polling for journals and status updates is accomplished by checking the "last visited" timestamp of each user in the DeviantArt user's "friends" list, and checking profile posts by users who have visited DeviantArt since the last Pandacap inbox refresh.
Pandacap does not currently allow the user to create posts that are not tied back to a public DeviantArt post.
DeviantArt is also used for authentication. Only the user specified in the Pandacap app settings can log in.
ActivityPub
Pandacap acts as an ActivityPub S2S server, hosting a single actor. This allows users of Mastodon, Pixelfed, et al to follow the Pandacap user and see image and text posts in their inbox.
Journal entries will be federated using the Article
type;
artwork posts and status updates will use Note
.
It also allows the Pandacap user to follow ActivityPub actors; image posts, text posts, and shares from these users are added to the appropriate section of the Pandacap inbox.
Shares are disabled by default for followed ActivityPub actors, but can be enabled on an actor-by-actor basis. Shares will appear in the inbox under the name of the user who shared the post, not the original poster's name.
Likes, shares, and replies from other users are shown on the Notifications page.
Pandacap cannot currently send replies to ActivityPub posts; you'll need to reply from another account instead.
The Pandacap user can add ActivityPub posts to a public "Favorites" page,
which is treated as a Like
in ActivityPub.
Atom/RSS
The Pandacap user can add RSS and Atom feeds to their follow list. Pandacap will check each feed periodically, and new posts in these feeds will be added to the appropriate section of the Pandacap inbox.
Podcast feeds (where items have an enclosure of audio/mpeg
)
will appear with a "download" button that downloads the .mp3 file.
Pandacap also provides a "split" button, which splits the podcast episode into five-minute .wma chunks collected within a .zip file. This allows you to burn the .wma chunks as individual tracks to a CD-R or CD-RW using Windows Media Player.
atproto
Pandacap implements a small atproto client. If the Pandacap user attaches an atproto (e.g. Bluesky) account, posts from the account's home timeline (e.g. posts from users they follow) will be added to the Pandacap inbox.
Reposts are included in the Pandacap inbox in the "Shares" section, under the name of the sharing user.
Pandacap posts can also be individually crossposted to Bluesky / atproto from the Pandacap "view post" page. This attaches the atproto post to the Pandacap post, which adds a "View on Bluesky" button and ensures that if the Pandacap post is deleted, the atproto post gets deleted as well.
Pandacap does not have the ability to apply updates to crossposts. The recommended workaround is to use Pandacap to detach the crosspost and create a new one, then delete the original from the Weasyl side.
Weasyl
If the Pandacap user attaches a Weasyl API key, new submissions from users they follow on Weasyl will be added to the Pandacap inbox.
Pandacap posts can also be individually crossposted to Weasyl from the Pandacap "view post" page. This attaches the Weasyl post to the Pandacap post, which adds a "View on Weasyl" button and ensures that if the Pandacap post is deleted, the atproto post gets deleted as well.
Posts without images will be created as journal entries.
Pandacap does not have the ability to apply updates to crossposts. The recommended workaround is to use Pandacap to detach the crosspost and create a new one, then delete the original from the Weasyl side.