--- /dev/null
+# dead-tooter
+
+There are a lot of people who have moved to the Fediverse from Twitter, and for
+some this is very exciting.
+
+The increase in volume has affected the administrators more than anyone, no
+doubht, but the users have also been affected. While Mastodon's filters and feed
+settings are exceedingly powerful, there are a few more things I'd like to be
+able to do with my Fedi data.
+
+* Sort follows/followers
+ * by account age
+ * by age of last post
+
+* Delete follows/followers in bulk
+ * by account age
+ * by age of last post
--- /dev/null
+package main
+
+import (
+ "fmt"
+ "io"
+ "net/http"
+ "net/url"
+)
+
+type App struct {
+ ClientName string `json:"client_name"`
+ RedirectUris string `json:"redirect_uris"`
+ Scopes string `json:"scopes"`
+ Website string `json:"website"`
+}
+
+func (a App) Create() (application Application, err error) {
+ resp, err := http.PostForm("https://hackers.town/api/v1/apps",
+ url.Values{
+ "client_name": {"dead-tooter"},
+ "redirect_uris": {"urn:ietf:wg:oauth:2.0:oob"},
+ "scopes": {"read:follows write:blocks"},
+ "website": {"https://dead-tooter.vexingworkshop.com"},
+ },
+ )
+ if err != nil {
+ return
+ }
+ defer resp.Body.Close()
+
+ body, err := io.ReadAll(resp.Body)
+ fmt.Printf("%s", resp.Status)
+ fmt.Printf("%s", string(body))
+
+ return Application{}, nil
+}
+
+type Application struct {
+ ID string `json:"id"`
+ Name string `json:"name"`
+ Website string `json:"website"`
+ RedirectURI string `json:"redirect_uri"`
+ ClientID string `json:"client_id"`
+ ClientSecret string `json:"client_secret"`
+ VapidKey string `json:"vapid_key"`
+}
+
+func (a Application) Login() {}
+
+func main() {
+ app := App{
+ ClientName: "dead-tooter",
+ RedirectUris: "urn:ietf:wg:oauth:2.0:oob",
+ Scopes: "read:follows",
+ Website: "https://dead-tooter.vexingworkshop.com",
+ }
+ _, err := app.Create()
+ if err != nil {
+ panic(err.Error())
+ }
+}