{"id":15095903,"url":"https://github.com/recoilme/tgram","last_synced_at":"2025-10-08T00:31:56.733Z","repository":{"id":138478138,"uuid":"138288007","full_name":"recoilme/tgram","owner":"recoilme","description":"typegram: open source publishing platform","archived":true,"fork":false,"pushed_at":"2019-09-30T09:09:40.000Z","size":13972,"stargazers_count":334,"open_issues_count":38,"forks_count":32,"subscribers_count":27,"default_branch":"master","last_synced_at":"2024-10-02T05:21:38.536Z","etag":null,"topics":["gin","golang","medium","slowpoke","telegram","telegraph","website"],"latest_commit_sha":null,"homepage":"http://tgr.am","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/recoilme.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-06-22T10:09:52.000Z","updated_at":"2024-09-20T02:23:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"1ced1743-e0bc-47b7-8fe1-4952b0603120","html_url":"https://github.com/recoilme/tgram","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/recoilme%2Ftgram","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/recoilme%2Ftgram/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/recoilme%2Ftgram/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/recoilme%2Ftgram/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/recoilme","download_url":"https://codeload.github.com/recoilme/tgram/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235669382,"owners_count":19026815,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gin","golang","medium","slowpoke","telegram","telegraph","website"],"created_at":"2024-09-25T15:43:35.631Z","updated_at":"2025-10-08T00:31:51.429Z","avatar_url":"https://github.com/recoilme.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Typegram\n\n[typegram](https://tgr.am) - open source publishing platform.\n\n**Basic Capabilities**\n\n - publications, comments\n - favorites, subscriptions\n - mentions, tags\n - ratings, votes and so on\n\n**Playground**\n\nYou can try the service on a special [test site](https://tst.tgr.am/). Please! Use this [playground](https://tst.tgr.am/) for play with engine!\n\n**Localization**\n\nThe service is available, for example, for [Russian-speaking](https://ru.tgr.am/), or [English-speaking](https://en.tgr.am/) users. During development, platforms for other languages are opened. On each subdomain, users and publications are separate. Please, help me to translate the welcome post for your language\n[Add my country](https://github.com/recoilme/tgram/issues/43)\n\n**Optimization**\n\nThe first thing that catches your eye is the high speed of page loads and aggressive optimization.\n![](https://tst.tgr.am/i/tst/recoilme/17_.png)\n\n\nYou will not find third-party scripts that monitor user behavior or huge styles / images. The site works with javascript turned off, it remains fast and convenient on any platform.\n\n**Subscriptions**\n\nOn the main page, the author you are subscribed to is displayed, and the number of new publications. The link leads to the first unread message, in chronological order, as in telegram. Typegram does not impose on you whom and when to read.\n![](https://tst.tgr.am/i/tst/recoilme/23_.png)\n\n**Mentions**\n\nWhen someone mentions you in comments you will see it on the main page\n![](https://tst.tgr.am/i/tst/recoilme/22_.png)\n\n**Editor**\n\nThe editor supports typing in markdown markup, with rich features and visual formatting. With the ability to make a post fullscreen, preview, autosave and other convenient \"tidbits\"\n![](https://en.tgr.am/i/en/recoilme/2_.png)\n\n**Rating system**\n\nYou may see three sections with strange names on the main page:\n\n**top (∧) mid (Ξ) btm (∨)**\n\n![](http://www.wallpaperdx.com/photo/pudge-butcher-dota-abstract-art-chain-full-hd-732-416.jpg)\n\nYes, I love DotA (my dog's name is Pudge, for example). And I'm sure that ratings are more about game mechanics/motivation than something seriously adequate. On typegram, content is divided into three parts, top, middle and bottom. All new articles go to farm the rating on the midline. Good articles go to the top. Bad articles fall to the bottom. Technically, the ranking system is copied from the ycombinator.\n\n**Rating of the article.**\n\n**+ 5:1 -**\n\nEach user has 10 votes per day. You may spend them on both pluses and minuses for one article, or distribute them as you want.\n\nThe author sees both the negative and the positive reactions, separately.\n\n**Rating of the comments**\n\n**+ 5**\n\nComments are positive only. I do not know why. Do not ask. I just want to give more opportunities for collecting feedback with different mechanics. And for comments, it is possible to give only one vote per comment. You have 10 votes for comments per day. One comment is one voice.\n\n\n**Tags**\n\nEach article may have a global tag. But only one. Be smart, then choose a tag for your article.\n\n\n**Monsters**\n\nEach user has a personal monster/avatar. Approximately this:\n![](https://en.tgr.am/i/en/recoilme/5.png)\n\n\n**Notification**\n\nIf user add email in profile he will receive notifications when someone mentions him in comments\n\n**Auto-publishing from Typegram to Telegram**\n\nFormatting posts in telegram is not very convenient. Usually, you have to use bots and type text manually in a markdown. Write to yourself - to see what happened. And if you need to insert in the post a link to the picture - then this is inconvenient doubly.\n\nOn typegram appeared the experimental mode of autopublishing to telegram. The site has a convenient editor, with autosave, uploading pictures, editing and publishing. Now, there is the possibility of automatic publication to telegram.\n\nAll what you need:\n - add  @type2telegrambot as administrator in channel\n - add telegram channel in profile settings\n\n![](https://ru.tgr.am/i/ru/recoilme/23_.png)\n\nThat's all. At the next publication - the typegram converts the post into a telegram markup and publishes it. Public and private channels are supported. And you can edit article directly on the site. \n\n**Stats**\n\nAll stats are open and available at this site: [stat.tgr.am](https://stat.tgr.am)\n\n**Android**\n\n[Experimental app](https://github.com/vogster/Typegram-android)\n\n**Openness**\n\nThe project is free and open source. I always welcome comments and suggestions on [github](https://github.com/recoilme/tgram)\n\n**Weekly news digest**\n\n[subscribe on weekly digest here](https://www.producthunt.com/upcoming/typegram)\n\n**App**\n\nThis app uses [slowpoke](https://github.com/recoilme/slowpoke) as the database. Package slowpoke implements a low-level key/value store in pure Go. This database engine was developed specially for typegram\n\n![slowpoke](https://en.tgr.am/i/en/recoilme/3_.png)\n\n\n# How it works\n```\n.\n├── main.go\n├── routers\n│   ├── routers.go      //routers\n└── models.go\n    ├── article.go      //data models for article\n    └── user.go         //data models for user\n\n```\n\n# Getting started\n\n\nYou only need golang to run typegram\n\n## Install Golang\nhttps://golang.org/doc/install\n## Environment Config\nmake sure your ~/.*shrc has the following variables:\n```\n➜  echo $GOPATH\n/Users/zitwang/test/\n➜  echo $GOROOT\n/usr/local/go/\n➜  echo $PATH\n...:/usr/local/go/bin:/Users/zitwang/test//bin:/usr/local/go//bin\n```\n\nReplace _zitwang_ with your own username.\n\n## Fresh \n\nFresh can help you rebuild and restart Typegram automatically\n```\ngo get -u github.com/pilu/fresh\n```\n\n\n## Env\n\nYou may create a tgram.env file with startup params, sample:\n```\nTGRAMPWD=SOM2324\u0026E*\u0026Ff!!EDjweljf\nTGRAMPORT=:8081\nTGRAMTITLE=typegram\nTGRAMNAME=Typegram\nTGRAMDESC=zen platform for writers\nTGRAMADMIN=recoilme\nTGRAMABOUT=/@recoilme/1\nTGRAMDOMAIN=tgr.am\n```\n\n\n## Start\n```\n➜  go get ./...\n➜  go build\n➜  ./tgram\n```\n\n## Thanks\n\n\n[oh-md (markdown-editor)](https://github.com/fr4nki/oh-md)\n\n\n[awsm.css](https://github.com/igoradamenko/awsm.css)\n\n\n[realworld.io](https://realworld.io)\n\n\n[dithering](https://github.com/MaxHalford/halfgone)\n\n## Design\n\n[egorabaturov](https://egorabaturov.com)\n\n\n[razuvaev](http://be.net/razuvaev)\n\n## Dev branch\n\n- master\n\n## Contributors\n\n[Contributors](https://github.com/recoilme/tgram/graphs/contributors)\n\n\nYou are welcome to!\n\n## Plans\n\n\nI try to build the new big thing for blogging) Much more than just a text version of medium. But i started from scratch.\nThe mobile version will be an incredible publishing platform for both writers and readers alike. Subscribe to be the first!\n\nhttps://www.producthunt.com/upcoming/typegram\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frecoilme%2Ftgram","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frecoilme%2Ftgram","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frecoilme%2Ftgram/lists"}