{"users":[{"id":115923,"username":"Discourse","name":null,"avatar_template":"/user_avatar/meta.discourse.org/discourse/{size}/148734_2.png","admin":true,"trust_level":4},{"id":135971,"username":"microhit","name":"","avatar_template":"/user_avatar/meta.discourse.org/microhit/{size}/447960_2.png","trust_level":2},{"id":95552,"username":"Moin","name":"","avatar_template":"/user_avatar/meta.discourse.org/moin/{size}/523407_2.png","trust_level":3},{"id":20815,"username":"marcospreviato","name":"Marcos P","avatar_template":"/user_avatar/meta.discourse.org/marcospreviato/{size}/54766_2.png","trust_level":2},{"id":32,"username":"codinghorror","name":"Jeff Atwood","avatar_template":"/user_avatar/meta.discourse.org/codinghorror/{size}/110067_2.png","admin":true,"trust_level":2},{"id":17969,"username":"Pad_Pors","name":"Pad Pors","avatar_template":"/user_avatar/meta.discourse.org/pad_pors/{size}/52016_2.png","trust_level":2},{"id":72263,"username":"denvergeeks","name":"","avatar_template":"/user_avatar/meta.discourse.org/denvergeeks/{size}/327671_2.png","trust_level":2},{"id":135392,"username":"NateDhaliwal","name":"Nate Dhaliwal","avatar_template":"/user_avatar/meta.discourse.org/natedhaliwal/{size}/313494_2.png","flair_name":"theme_authors","flair_url":"paintbrush","flair_bg_color":"ddd","flair_color":"111","flair_group_id":73,"trust_level":3},{"id":113000,"username":"chapoi","name":"","avatar_template":"/user_avatar/meta.discourse.org/chapoi/{size}/537252_2.png","flair_name":"team","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/b/ebee30bd98aef20357e4a177a5a1e45b877ce088.svg","flair_color":"111","flair_group_id":47,"admin":true,"trust_level":3},{"id":12933,"username":"gdpelican","name":"James Kiesel","avatar_template":"/user_avatar/meta.discourse.org/gdpelican/{size}/81308_2.png","trust_level":2},{"id":66606,"username":"spirobel","name":"","avatar_template":"/user_avatar/meta.discourse.org/spirobel/{size}/170908_2.png","flair_name":"plugin_authors","flair_url":"plug","flair_bg_color":"dddddd","flair_color":"111111","flair_group_id":48,"trust_level":2},{"id":13378,"username":"angus","name":"Angus McLeod","avatar_template":"/user_avatar/meta.discourse.org/angus/{size}/341715_2.png","flair_name":"support-experts","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/2/e250ec403580530d19e6a9ed42d0d525a51a9dbe.svg","flair_bg_color":"FFFFFF","flair_group_id":142,"trust_level":4},{"id":88244,"username":"frank.manuel","name":"Frank Manuel","avatar_template":"/user_avatar/meta.discourse.org/frank.manuel/{size}/203348_2.png","trust_level":2},{"id":185178,"username":"TimFelix","name":null,"avatar_template":"https://avatars.discourse-cdn.com/v4/letter/t/919ad9/{size}.png","trust_level":1},{"id":183669,"username":"Yan_Rudenko","name":"Yan Rudenko","avatar_template":"/user_avatar/meta.discourse.org/yan_rudenko/{size}/493431_2.png","trust_level":1},{"id":78445,"username":"Don","name":"","avatar_template":"/user_avatar/meta.discourse.org/don/{size}/228726_2.png","trust_level":4},{"id":102688,"username":"valsha","name":"KingPin","avatar_template":"/user_avatar/meta.discourse.org/valsha/{size}/230631_2.png","trust_level":2},{"id":83631,"username":"Jagster","name":"Jakke Flemming","avatar_template":"/user_avatar/meta.discourse.org/jagster/{size}/192154_2.png","trust_level":2},{"id":103767,"username":"Usman_Shahid","name":"Usman Shahid","avatar_template":"/user_avatar/meta.discourse.org/usman_shahid/{size}/232411_2.png","trust_level":2},{"id":57788,"username":"nathank","name":"Nathan Kershaw","avatar_template":"/user_avatar/meta.discourse.org/nathank/{size}/290039_2.png","flair_name":"support-advocates","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/4/e4038d4d9848de2eabab38e17b8bdb69da154024.svg","flair_bg_color":"FFFFFF","flair_group_id":148,"trust_level":4},{"id":83098,"username":"jordan-violet","name":"Jordan Violet","avatar_template":"/user_avatar/meta.discourse.org/jordan-violet/{size}/281428_2.png","trust_level":2},{"id":142927,"username":"Rick_Jing","name":"Rick Jing","avatar_template":"/user_avatar/meta.discourse.org/rick_jing/{size}/354677_2.png","trust_level":2},{"id":23968,"username":"david","name":"David Taylor","avatar_template":"/user_avatar/meta.discourse.org/david/{size}/157490_2.png","primary_group_name":"team","flair_name":"team","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/b/ebee30bd98aef20357e4a177a5a1e45b877ce088.svg","flair_color":"111","flair_group_id":47,"admin":true,"trust_level":3},{"id":3,"username":"supermathie","name":"Michael Brown","avatar_template":"/user_avatar/meta.discourse.org/supermathie/{size}/507518_2.png","primary_group_name":"team","flair_name":"team","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/b/ebee30bd98aef20357e4a177a5a1e45b877ce088.svg","flair_color":"111","flair_group_id":47,"admin":true,"trust_level":3},{"id":8722,"username":"Falco","name":"Falco","avatar_template":"/user_avatar/meta.discourse.org/falco/{size}/179432_2.png","primary_group_name":"team","flair_name":"team","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/b/ebee30bd98aef20357e4a177a5a1e45b877ce088.svg","flair_color":"111","flair_group_id":47,"admin":true,"trust_level":4},{"id":27384,"username":"merefield","name":"Robert","avatar_template":"/user_avatar/meta.discourse.org/merefield/{size}/176214_2.png","trust_level":3},{"id":144959,"username":"gabriel","name":"Gabriel Grubba","avatar_template":"/user_avatar/meta.discourse.org/gabriel/{size}/367911_2.png","primary_group_name":"team","flair_name":"team","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/b/ebee30bd98aef20357e4a177a5a1e45b877ce088.svg","flair_color":"111","flair_group_id":47,"admin":true,"trust_level":2},{"id":15209,"username":"pfaffman","name":"Jay Pfaffman","avatar_template":"/user_avatar/meta.discourse.org/pfaffman/{size}/120154_2.png","flair_name":"support-experts","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/2/e250ec403580530d19e6a9ed42d0d525a51a9dbe.svg","flair_bg_color":"FFFFFF","flair_group_id":142,"trust_level":4},{"id":73340,"username":"Alexander","name":"Alexander Barrios","avatar_template":"/user_avatar/meta.discourse.org/alexander/{size}/497634_2.png","flair_name":"support-enthusiasts","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/1/3/13f5d8d7e56be8a6a1ea3de009b985a548aec8d4.svg","flair_bg_color":"FFFFFF","flair_group_id":151,"trust_level":2},{"id":63814,"username":"ondrej","name":"","avatar_template":"/user_avatar/meta.discourse.org/ondrej/{size}/198804_2.png","trust_level":3},{"id":101949,"username":"kinetiksoft","name":"","avatar_template":"/user_avatar/meta.discourse.org/kinetiksoft/{size}/229578_2.png","trust_level":2},{"id":141342,"username":"martyn_thomas","name":"Martyn Thomas","avatar_template":"/user_avatar/meta.discourse.org/martyn_thomas/{size}/344874_2.png","trust_level":2},{"id":67228,"username":"영광_임","name":"영광 임","avatar_template":"/user_avatar/meta.discourse.org/영광_임/{size}/148997_2.png","trust_level":2},{"id":68923,"username":"Luke_Clancy","name":"Luke Clancy","avatar_template":"/user_avatar/meta.discourse.org/luke_clancy/{size}/166703_2.png","trust_level":1},{"id":125384,"username":"SwanseN21","name":"Sean Monsanto","avatar_template":"/user_avatar/meta.discourse.org/swansen21/{size}/283233_2.png","trust_level":1},{"id":139330,"username":"elle7","name":"Laura White","avatar_template":"/user_avatar/meta.discourse.org/elle7/{size}/331525_2.png","trust_level":1},{"id":79292,"username":"honeymoose","name":"HoneyMoose","avatar_template":"/user_avatar/meta.discourse.org/honeymoose/{size}/198718_2.png","trust_level":2},{"id":119102,"username":"Lhc_fl","name":"Linca","avatar_template":"/user_avatar/meta.discourse.org/lhc_fl/{size}/268115_2.png","trust_level":2},{"id":138598,"username":"wayway_way","name":"wayway way","avatar_template":"/user_avatar/meta.discourse.org/wayway_way/{size}/327018_2.png","trust_level":2},{"id":14617,"username":"scavin","name":"scavin","avatar_template":"/user_avatar/meta.discourse.org/scavin/{size}/115938_2.png","flair_name":"translators","flair_url":"globe","flair_bg_color":"ddd","flair_color":"111","flair_group_id":50,"trust_level":2},{"id":45577,"username":"hawm","name":"Hawm","avatar_template":"https://avatars.discourse-cdn.com/v4/letter/h/f07891/{size}.png","trust_level":2},{"id":34674,"username":"Johani","name":"Joe","avatar_template":"/user_avatar/meta.discourse.org/johani/{size}/176920_2.png","trust_level":2},{"id":13093,"username":"pacharanero","name":"Marcus Baw","avatar_template":"/user_avatar/meta.discourse.org/pacharanero/{size}/500583_2.png","trust_level":4},{"id":98881,"username":"Luke_Cousins","name":"Luke Cousins","avatar_template":"/user_avatar/meta.discourse.org/luke_cousins/{size}/223644_2.png","trust_level":2},{"id":29613,"username":"Timothy_Vail","name":"Timothy Vail","avatar_template":"/user_avatar/meta.discourse.org/timothy_vail/{size}/90872_2.png","trust_level":2},{"id":36855,"username":"William04GamerA","name":"William","avatar_template":"https://avatars.discourse-cdn.com/v4/letter/w/90db22/{size}.png","trust_level":2},{"id":66060,"username":"Michael_McCrae","name":"Michael McCrae","avatar_template":"/user_avatar/meta.discourse.org/michael_mccrae/{size}/143362_2.png","trust_level":1},{"id":55682,"username":"Muwonge_Ronald","name":"Muwonge Ronald","avatar_template":"/user_avatar/meta.discourse.org/muwonge_ronald/{size}/160546_2.png","trust_level":2},{"id":129042,"username":"SimonBiggs","name":"Simon Biggs","avatar_template":"/user_avatar/meta.discourse.org/simonbiggs/{size}/292760_2.png","trust_level":2},{"id":109684,"username":"f1r4s","name":"Eddie","avatar_template":"/user_avatar/meta.discourse.org/f1r4s/{size}/245347_2.png","trust_level":2},{"id":124068,"username":"wendellverli","name":"Wendell Fernandes","avatar_template":"/user_avatar/meta.discourse.org/wendellverli/{size}/280396_2.png","trust_level":2},{"id":62294,"username":"Heliosurge","name":"Dan DeMontmorency","avatar_template":"/user_avatar/meta.discourse.org/heliosurge/{size}/131899_2.png","trust_level":3},{"id":19473,"username":"neo","name":"R.Zhang","avatar_template":"/user_avatar/meta.discourse.org/neo/{size}/156675_2.png","trust_level":2},{"id":102068,"username":"jayarr","name":"JR","avatar_template":"/user_avatar/meta.discourse.org/jayarr/{size}/230949_2.png","trust_level":2},{"id":67026,"username":"PaulinaMX","name":"ForosMX","avatar_template":"/user_avatar/meta.discourse.org/paulinamx/{size}/210473_2.png","trust_level":2},{"id":26605,"username":"LeoDavidson","name":"Leo Davidson","avatar_template":"/user_avatar/meta.discourse.org/leodavidson/{size}/119574_2.png","trust_level":2},{"id":1995,"username":"zogstrip","name":"","avatar_template":"/user_avatar/meta.discourse.org/zogstrip/{size}/512781_2.png","primary_group_name":"team","flair_name":"team","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/b/ebee30bd98aef20357e4a177a5a1e45b877ce088.svg","flair_color":"111","flair_group_id":47,"admin":true,"trust_level":2},{"id":28866,"username":"schungx","name":"Stephen Chung","avatar_template":"/user_avatar/meta.discourse.org/schungx/{size}/70989_2.png","trust_level":2},{"id":8571,"username":"tobiaseigen","name":"Tobias Eigen","avatar_template":"/user_avatar/meta.discourse.org/tobiaseigen/{size}/539204_2.png","trust_level":3},{"id":5795,"username":"mattdm","name":"Matthew Miller","avatar_template":"/user_avatar/meta.discourse.org/mattdm/{size}/216484_2.png","trust_level":2},{"id":85965,"username":"JonathanShaw","name":"Jonathan Shaw","avatar_template":"/user_avatar/meta.discourse.org/jonathanshaw/{size}/532672_2.png","trust_level":2},{"id":35474,"username":"Canapin","name":"Coin-coin le Canapin","avatar_template":"/user_avatar/meta.discourse.org/canapin/{size}/119591_2.png","trust_level":3},{"id":33297,"username":"Heather_Dudley","name":"Heather Dudley","avatar_template":"/user_avatar/meta.discourse.org/heather_dudley/{size}/151925_2.png","trust_level":2},{"id":96216,"username":"Johnny_McIvor","name":"Johnny McIvor","avatar_template":"/user_avatar/meta.discourse.org/johnny_mcivor/{size}/218747_2.png","trust_level":2},{"id":12801,"username":"bartv","name":"Bart ","avatar_template":"/user_avatar/meta.discourse.org/bartv/{size}/130052_2.png","trust_level":2},{"id":71403,"username":"raghukamath","name":"Raghavendra Kamath","avatar_template":"/user_avatar/meta.discourse.org/raghukamath/{size}/160330_2.png","trust_level":2},{"id":66204,"username":"fzngagan","name":"Faizaan Gagan","avatar_template":"/user_avatar/meta.discourse.org/fzngagan/{size}/259349_2.png","primary_group_name":"team","flair_name":"team","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/b/ebee30bd98aef20357e4a177a5a1e45b877ce088.svg","flair_color":"111","flair_group_id":47,"admin":true,"trust_level":3},{"id":75906,"username":"neounix","name":"Dark Matter","avatar_template":"/user_avatar/meta.discourse.org/neounix/{size}/215617_2.png","trust_level":2},{"id":74650,"username":"zcuric","name":"Zdravko","avatar_template":"/user_avatar/meta.discourse.org/zcuric/{size}/292837_2.png","trust_level":2},{"id":23163,"username":"j.jaffeux","name":"Joffrey Jaffeux","avatar_template":"/user_avatar/meta.discourse.org/j.jaffeux/{size}/60297_2.png","primary_group_name":"team","flair_name":"team","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/b/ebee30bd98aef20357e4a177a5a1e45b877ce088.svg","flair_color":"111","flair_group_id":47,"admin":true,"trust_level":2},{"id":39022,"username":"Judith","name":"Judith Meyer","avatar_template":"/user_avatar/meta.discourse.org/judith/{size}/289903_2.png","trust_level":2},{"id":38013,"username":"Gulshan_Kumar","name":"Gulshan Kumar","avatar_template":"/user_avatar/meta.discourse.org/gulshan_kumar/{size}/119562_2.png","trust_level":2},{"id":6626,"username":"riking","name":"Kane York","avatar_template":"/user_avatar/meta.discourse.org/riking/{size}/170938_2.png","trust_level":2},{"id":2,"username":"neil","name":"Neil Lalonde","avatar_template":"/user_avatar/meta.discourse.org/neil/{size}/102150_2.png","trust_level":2},{"id":30818,"username":"PoojaPatel","name":"Pooja Patel","avatar_template":"https://avatars.discourse-cdn.com/v4/letter/p/edb3f5/{size}.png","trust_level":2}],"primary_groups":[{"id":47,"name":"team"}],"flair_groups":[{"id":73,"name":"theme_authors","flair_url":"paintbrush","flair_bg_color":"ddd","flair_color":"111"},{"id":47,"name":"team","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/b/ebee30bd98aef20357e4a177a5a1e45b877ce088.svg","flair_bg_color":"","flair_color":"111"},{"id":48,"name":"plugin_authors","flair_url":"plug","flair_bg_color":"dddddd","flair_color":"111111"},{"id":142,"name":"support-experts","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/2/e250ec403580530d19e6a9ed42d0d525a51a9dbe.svg","flair_bg_color":"FFFFFF","flair_color":""},{"id":148,"name":"support-advocates","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/4/e4038d4d9848de2eabab38e17b8bdb69da154024.svg","flair_bg_color":"FFFFFF","flair_color":""},{"id":151,"name":"support-enthusiasts","flair_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/1/3/13f5d8d7e56be8a6a1ea3de009b985a548aec8d4.svg","flair_bg_color":"FFFFFF","flair_color":""},{"id":50,"name":"translators","flair_url":"globe","flair_bg_color":"ddd","flair_color":"111"}],"topic_list":{"can_create_topic":false,"more_topics_url":"/c/wiki/developers/179?page=1","per_page":30,"top_tags":[{"id":478,"name":"how-to","slug":"how-to"},{"id":274,"name":"plugin-guides","slug":"plugin-guides"},{"id":150,"name":"dev-install","slug":"dev-install"},{"id":479,"name":"explanation","slug":"explanation"},{"id":330,"name":"rest-api","slug":"rest-api"},{"id":482,"name":"reference","slug":"reference"},{"id":820,"name":"theme-guides","slug":"theme-guides"},{"id":16,"name":"translation","slug":"translation"},{"id":2,"name":"badges","slug":"badges"},{"id":813,"name":"content","slug":"content"},{"id":814,"name":"customization","slug":"customization"},{"id":278,"name":"development","slug":"development"},{"id":484,"name":"tutorial","slug":"tutorial"},{"id":618,"name":"user-custom-fields","slug":"user-custom-fields"}],"topics":[{"fancy_title":"Developer Index","fancy_title_localized":false,"locale":"en","id":322723,"title":"Developer Index","slug":"developer-index","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2024-08-21T14:15:42.960Z","last_posted_at":"2024-08-21T14:15:43.057Z","bumped":true,"bumped_at":"2024-08-21T14:15:43.057Z","archetype":"regular","unseen":false,"pinned":true,"unpinned":null,"excerpt":"Discourse dev environment setup: Guide to Setting Up Discourse Development Environment - GitHub Codespace\nNSFW content blurring: Our solution for blurring NSFW content\nLanguage-specific code blocks: Setup Code blocks th&hellip;","visible":true,"closed":true,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[],"tags_descriptions":{},"views":244,"like_count":3,"has_summary":false,"last_poster_username":"Discourse","category_id":179,"op_like_count":3,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Collection of links to various Discourse development guides, including environment setup, plugin creation, customization, and API usage, covering topics from beginner guides to advanced plugin development and theme customization.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":115923,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Customizing subcategory boxes in Discourse","fancy_title_localized":false,"locale":"en","id":239691,"title":"Customizing subcategory boxes in Discourse","slug":"customizing-subcategory-boxes-in-discourse","posts_count":3,"reply_count":1,"highest_post_number":6,"image_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/6/f/6f81f6c65323d8d5c2beb14c5458b3d8ee3f5e37.png","created_at":"2022-09-21T19:19:52.577Z","last_posted_at":"2026-04-02T21:45:10.074Z","bumped":true,"bumped_at":"2026-04-02T21:45:10.074Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":":bookmark: This guide explains how to customize the appearance of subcategory boxes in Discourse, including adjusting styles for featured topics, modifying the “Boxes” style, and managing category description truncation&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":[{"max_width":null,"max_height":null,"width":1021,"height":257,"url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/6/f/6f81f6c65323d8d5c2beb14c5458b3d8ee3f5e37.png"},{"max_width":800,"max_height":800,"width":800,"height":201,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/6/f/6f81f6c65323d8d5c2beb14c5458b3d8ee3f5e37_2_800x201.png"},{"max_width":600,"max_height":600,"width":600,"height":151,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/6/f/6f81f6c65323d8d5c2beb14c5458b3d8ee3f5e37_2_600x151.png"},{"max_width":400,"max_height":400,"width":400,"height":100,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/6/f/6f81f6c65323d8d5c2beb14c5458b3d8ee3f5e37_2_400x100.png"},{"max_width":300,"max_height":300,"width":300,"height":75,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/6/f/6f81f6c65323d8d5c2beb14c5458b3d8ee3f5e37_2_300x75.png"},{"max_width":200,"max_height":200,"width":200,"height":50,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/6/f/6f81f6c65323d8d5c2beb14c5458b3d8ee3f5e37_2_200x50.png"}],"tags":[{"id":478,"name":"how-to","slug":"how-to"},{"id":814,"name":"customization","slug":"customization"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":1397,"like_count":1,"has_summary":false,"last_poster_username":"Moin","category_id":179,"op_like_count":0,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"A user questions why topics remain visible on mobile despite desktop customizations, to which another member responds that separate mobile-specific settings likely control this behavior.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":115923,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":135971,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":95552,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Setup a ToolTip in your Forum","fancy_title_localized":false,"locale":"en","id":45792,"title":"Setup a ToolTip in your Forum","slug":"setup-a-tooltip-in-your-forum","posts_count":5,"reply_count":1,"highest_post_number":5,"image_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/2/9/29795cb79a11f5b947ca4b83334a38eee138cc01.png","created_at":"2016-06-16T23:09:01.116Z","last_posted_at":"2026-01-12T16:59:30.521Z","bumped":true,"bumped_at":"2026-01-12T16:59:30.521Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Hi, this is my first post sharing a resource to help this wonderful community. \nI want to help them create simple forms a tooltip for your forum making it modern and clean, ok lets do it! \nFirst what is tooltip? A toolti&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":[{"max_width":null,"max_height":null,"width":377,"height":418,"url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/2/9/29795cb79a11f5b947ca4b83334a38eee138cc01.png"},{"max_width":400,"max_height":400,"width":360,"height":400,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/2/9/29795cb79a11f5b947ca4b83334a38eee138cc01_2_360x400.png"},{"max_width":300,"max_height":300,"width":270,"height":300,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/2/9/29795cb79a11f5b947ca4b83334a38eee138cc01_2_270x300.png"},{"max_width":200,"max_height":200,"width":180,"height":200,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/2/9/29795cb79a11f5b947ca4b83334a38eee138cc01_2_180x200.png"}],"tags":[{"id":478,"name":"how-to","slug":"how-to"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":3179,"like_count":23,"has_summary":false,"last_poster_username":"denvergeeks","category_id":179,"op_like_count":11,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"A user shares CSS code to create tooltips for forums, while another suggests using a theme component instead, noting hover-based tooltips don’t work well on mobile devices.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":20815,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":32,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":17969,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":72263,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Common list of imports for Theme Components/plugins (JS)","fancy_title_localized":false,"locale":"en","id":382493,"title":"Common list of imports for Theme Components/plugins (JS)","slug":"common-list-of-imports-for-theme-components-plugins-js","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2025-09-13T03:13:05.568Z","last_posted_at":"2025-12-26T12:19:50.196Z","bumped":true,"bumped_at":"2025-12-26T12:19:50.196Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"I usually find myself digging around to get imports for different things when I make a Theme Component, so I decided to compile a bunch of them and put them here. \nEmber-related\n\n\n\n\nName\nImport\nUsage\n\n\n\n\nComponent\nimport&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[],"tags_descriptions":{},"views":172,"like_count":12,"has_summary":false,"last_poster_username":"chapoi","category_id":179,"op_like_count":11,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Users appreciate the compiled list of Ember and Discourse imports for theme components, noting VS Code's autocomplete often suggests incorrect paths, making such references helpful.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":135392,"primary_group_id":null,"flair_group_id":73},{"extras":"latest","description":"Most Recent Poster","user_id":113000,"primary_group_id":null,"flair_group_id":47}]},{"fancy_title":"Override existing Discourse methods in plugins","fancy_title_localized":false,"locale":"en","id":83389,"title":"Override existing Discourse methods in plugins","slug":"override-existing-discourse-methods-in-plugins","posts_count":9,"reply_count":5,"highest_post_number":13,"image_url":null,"created_at":"2018-03-20T11:37:16.168Z","last_posted_at":"2025-12-10T17:36:56.810Z","bumped":true,"bumped_at":"2025-12-10T17:36:56.810Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"I’ve been running into a bunch of instances recently of needing to override existing ruby methods from plugins, and thought I’d share my best practices here. \nOverriding an instance method\nclass ::TopicQuery\n  module Bab&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[{"id":478,"name":"how-to","slug":"how-to"},{"id":274,"name":"plugin-guides","slug":"plugin-guides"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":4871,"like_count":65,"has_summary":false,"last_poster_username":"TimFelix","category_id":179,"op_like_count":35,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"A discussion on overriding existing Discourse methods in plugins, focusing on techniques for instance methods, class methods, and scopes, with a recent example showing how to override a singleton class method using prepend in a module.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":12933,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":66606,"primary_group_id":null,"flair_group_id":48},{"extras":null,"description":"Frequent Poster","user_id":13378,"primary_group_id":null,"flair_group_id":142},{"extras":null,"description":"Frequent Poster","user_id":88244,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":185178,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"User custom fields validation implementation","fancy_title_localized":false,"locale":"en","id":388179,"title":"User custom fields validation implementation","slug":"user-custom-fields-validation-implementation","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2025-11-11T20:10:06.292Z","last_posted_at":"2025-11-11T20:10:06.361Z","bumped":true,"bumped_at":"2025-11-11T20:10:06.361Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"This is an article for future DEVs that might need this for creating custom Plugin specifically for validation User custom fields. \nWritten while having Discourse version 3.6.0.beta3-latest (current commit a7326abf15), s&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[{"id":618,"name":"user-custom-fields","slug":"user-custom-fields"},{"id":278,"name":"development","slug":"development"}],"tags_descriptions":{},"views":94,"like_count":1,"has_summary":false,"last_poster_username":"Yan_Rudenko","category_id":179,"op_like_count":1,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"A developer shares a guide for implementing unique value validation on Discourse user custom fields via a custom plugin, addressing lack of documentation and core API usage.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":183669,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Customize the New Topic button","fancy_title_localized":false,"locale":"en","id":197848,"title":"Customize the New Topic button","slug":"customize-the-new-topic-button","posts_count":12,"reply_count":4,"highest_post_number":13,"image_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/0/0/00eff69c3ff5b23f725e12ce244a6c0892779804.gif","created_at":"2021-07-22T11:34:47.602Z","last_posted_at":"2025-06-10T22:58:15.707Z","bumped":true,"bumped_at":"2025-06-10T22:58:15.707Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Hello, \nI just want to share with you how I make our new topic button. Little CSS :slight_smile: \nI use for this color variables. (tertiary, secondary and primary-medium) \nNew Topic button \n \nOpen Draft button \n \n\n#creat&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":[{"max_width":null,"max_height":null,"width":542,"height":206,"url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/0/0/00eff69c3ff5b23f725e12ce244a6c0892779804.gif"},{"max_width":400,"max_height":400,"width":400,"height":152,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/0/0/00eff69c3ff5b23f725e12ce244a6c0892779804_2_400x152.gif"},{"max_width":300,"max_height":300,"width":300,"height":114,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/0/0/00eff69c3ff5b23f725e12ce244a6c0892779804_2_300x114.gif"},{"max_width":200,"max_height":200,"width":200,"height":76,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/0/0/00eff69c3ff5b23f725e12ce244a6c0892779804_2_200x76.gif"}],"tags":[{"id":478,"name":"how-to","slug":"how-to"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":2379,"like_count":24,"has_summary":false,"last_poster_username":"nathank","category_id":179,"op_like_count":10,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Users discuss customizing the New Topic button's appearance and text via CSS and theme components, with solutions shared for styling, hover effects, and text changes through site texts or I18n translations.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":78445,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":102688,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":83631,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":103767,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":57788,"primary_group_id":null,"flair_group_id":148}]},{"fancy_title":"Working with .erb templates in a plugin","fancy_title_localized":false,"locale":"en","id":345777,"title":"Working with .erb templates in a plugin","slug":"working-with-erb-templates-in-a-plugin","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2025-01-06T09:12:26.736Z","last_posted_at":"2025-01-06T09:12:26.795Z","bumped":true,"bumped_at":"2025-04-13T11:08:29.684Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"I’ve been giving some advice on how to work with .erb templates in Discourse recently and noticed there isn’t much detail on this here on meta, so I thought I’d start this wiki on the subject. This wiki assumes you know &hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[],"tags_descriptions":{},"views":125,"like_count":8,"has_summary":false,"last_poster_username":"angus","category_id":179,"op_like_count":8,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Angus initiated a wiki to explain working with .erb templates in Discourse plugins, covering server outlets, HTML builders, and template overriding, assuming prior Rails knowledge.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":13378,"primary_group_id":null,"flair_group_id":142}]},{"fancy_title":"Preloading data and dealing with N+1 Query problems","fancy_title_localized":false,"locale":"en","id":347688,"title":"Preloading data and dealing with N+1 Query problems","slug":"preloading-data-and-dealing-with-n-1-query-problems","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2025-01-17T14:41:19.061Z","last_posted_at":"2025-01-17T14:41:19.129Z","bumped":true,"bumped_at":"2025-01-17T15:17:12.872Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"When working with the Discourse rails application, whether building a plugin, or making a pull request to discourse/discourse there are a number of contexts where you’ll encounter N+1 query problems. This topic explains &hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[],"tags_descriptions":{},"views":143,"like_count":4,"has_summary":false,"last_poster_username":"angus","category_id":179,"op_like_count":4,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Encountering N+1 query problems in Discourse rails application requires handling data preloading, addressed through eager loading associations and utilizing hooks like TopicView's on_preload method.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":13378,"primary_group_id":null,"flair_group_id":142}]},{"fancy_title":"(outdated) Guide to Setting Up Discourse Development Environment - GitHub Codespace","fancy_title_localized":false,"locale":"en","id":307231,"title":"(outdated) Guide to Setting Up Discourse Development Environment - GitHub Codespace","slug":"outdated-guide-to-setting-up-discourse-development-environment-github-codespace","posts_count":9,"reply_count":3,"highest_post_number":9,"image_url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/b/e/6/be6d2b97057f5c5195529fa13f081b6e5a995f8a_2_1024x827.png","created_at":"2024-05-08T10:44:56.543Z","last_posted_at":"2024-11-14T12:20:09.118Z","bumped":true,"bumped_at":"2024-11-14T12:20:09.118Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Developing Using GitHub Codespaces\nGitHub Codespace is a great development option. It’s great because it’s hosted in the cloud, I can easily ensure that everyone developing here has the same environment, no dealing wit&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":[{"max_width":null,"max_height":null,"width":1920,"height":1552,"url":"https://d11a6trkgmumsb.cloudfront.net/original/4X/b/e/6/be6d2b97057f5c5195529fa13f081b6e5a995f8a.png"},{"max_width":1024,"max_height":1024,"width":1024,"height":827,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/b/e/6/be6d2b97057f5c5195529fa13f081b6e5a995f8a_2_1024x827.png"},{"max_width":800,"max_height":800,"width":800,"height":646,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/b/e/6/be6d2b97057f5c5195529fa13f081b6e5a995f8a_2_800x646.png"},{"max_width":600,"max_height":600,"width":600,"height":485,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/b/e/6/be6d2b97057f5c5195529fa13f081b6e5a995f8a_2_600x485.png"},{"max_width":400,"max_height":400,"width":400,"height":323,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/b/e/6/be6d2b97057f5c5195529fa13f081b6e5a995f8a_2_400x323.png"},{"max_width":300,"max_height":300,"width":300,"height":242,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/b/e/6/be6d2b97057f5c5195529fa13f081b6e5a995f8a_2_300x242.png"},{"max_width":200,"max_height":200,"width":200,"height":161,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/b/e/6/be6d2b97057f5c5195529fa13f081b6e5a995f8a_2_200x161.png"}],"tags":[{"id":150,"name":"dev-install","slug":"dev-install"}],"tags_descriptions":{"dev-install":"Instructions and issues with installing Discourse for development"},"views":928,"like_count":29,"has_summary":false,"last_poster_username":"david","category_id":179,"op_like_count":11,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Discourse core updated with devcontainer configuration, simplifying development environment setup on GitHub Codespaces, rendering manual steps obsolete, as stated in official docs.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":83098,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":142927,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":135392,"primary_group_id":null,"flair_group_id":73},{"extras":null,"description":"Frequent Poster","user_id":95552,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":23968,"primary_group_id":47,"flair_group_id":47}]},{"fancy_title":"Getting started using Postman with the Discourse API","fancy_title_localized":false,"locale":"en","id":333669,"title":"Getting started using Postman with the Discourse API","slug":"getting-started-using-postman-with-the-discourse-api","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://d11a6trkgmumsb.cloudfront.net/original/4X/f/2/2/f222bdab4f11f399c8fb7df63c90a3db372b439e.png","created_at":"2024-10-30T17:49:40.542Z","last_posted_at":"2024-10-30T17:49:40.683Z","bumped":true,"bumped_at":"2024-10-30T18:54:31.965Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Summary\nPostman is a way to easily construct and test requests against an API. \nConfiguring with Discourse\n\n\nAfter opening Postman, click Create Workspace: \n\n  \n\n\n\nChoose Blank workspace and click Next. \n\n\nTitle it Disco&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":[{"max_width":null,"max_height":null,"width":633,"height":181,"url":"https://d11a6trkgmumsb.cloudfront.net/original/4X/f/2/2/f222bdab4f11f399c8fb7df63c90a3db372b439e.png"},{"max_width":600,"max_height":600,"width":600,"height":171,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/f/2/2/f222bdab4f11f399c8fb7df63c90a3db372b439e_2_600x171.png"},{"max_width":400,"max_height":400,"width":400,"height":114,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/f/2/2/f222bdab4f11f399c8fb7df63c90a3db372b439e_2_400x114.png"},{"max_width":300,"max_height":300,"width":300,"height":85,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/f/2/2/f222bdab4f11f399c8fb7df63c90a3db372b439e_2_300x85.png"},{"max_width":200,"max_height":200,"width":200,"height":57,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/f/2/2/f222bdab4f11f399c8fb7df63c90a3db372b439e_2_200x57.png"}],"tags":[],"tags_descriptions":{},"views":194,"like_count":7,"has_summary":false,"last_poster_username":"supermathie","category_id":179,"op_like_count":7,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Postman is used to construct and test API requests; configuring it with Discourse API involves creating a workspace, importing the API, and adding authentication via variables and pre-request scripts.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":3,"primary_group_id":47,"flair_group_id":47}]},{"fancy_title":"Add a custom per-user setting in a plugin","fancy_title_localized":false,"locale":"en","id":94048,"title":"Add a custom per-user setting in a plugin","slug":"add-a-custom-per-user-setting-in-a-plugin","posts_count":28,"reply_count":16,"highest_post_number":29,"image_url":null,"created_at":"2018-08-06T20:39:54.293Z","last_posted_at":"2023-12-20T18:49:07.515Z","bumped":true,"bumped_at":"2024-09-12T12:50:45.252Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"I just went through this process and experienced a bunch of trial and error, so I thought I’d document my findings to help the next developer to come along. \nThe things I needed: \n\n\nRegister your custom field type (mine &hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[{"id":478,"name":"how-to","slug":"how-to"},{"id":274,"name":"plugin-guides","slug":"plugin-guides"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":4559,"like_count":120,"has_summary":false,"last_poster_username":"merefield","category_id":179,"op_like_count":33,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Users discuss adding custom per-user settings in a plugin, highlighting the required steps, potential issues with Ruby 3.x, and the possibility of a simpler registration method, while also exploring the display of custom fields in user profiles and cards.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":12933,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":13378,"primary_group_id":null,"flair_group_id":142},{"extras":null,"description":"Frequent Poster","user_id":23968,"primary_group_id":47,"flair_group_id":47},{"extras":null,"description":"Frequent Poster","user_id":8722,"primary_group_id":47,"flair_group_id":47},{"extras":"latest","description":"Most Recent Poster","user_id":27384,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Automating Discourse Plugin Setup with `create-discourse-plugin` gem","fancy_title_localized":false,"locale":"en","id":315013,"title":"Automating Discourse Plugin Setup with `create-discourse-plugin` gem","slug":"automating-discourse-plugin-setup-with-create-discourse-plugin-gem","posts_count":8,"reply_count":4,"highest_post_number":8,"image_url":"https://d11a6trkgmumsb.cloudfront.net/original/4X/c/1/d/c1d3a38e2cdaeba5efdff8fc10ff0a5dbe926b17.png","created_at":"2024-07-04T13:53:41.649Z","last_posted_at":"2024-08-27T18:26:52.104Z","bumped":true,"bumped_at":"2024-08-27T18:34:01.374Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":":mega:  This plugin is now bundled with Discourse core. There is no need to use this gem. \nTo create a new plugin, use: \nrake plugin:create[plugin-name] \n\nSince I started developing discourse plugins, I felt the overall&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":[{"max_width":null,"max_height":null,"width":690,"height":278,"url":"https://d11a6trkgmumsb.cloudfront.net/original/4X/c/1/d/c1d3a38e2cdaeba5efdff8fc10ff0a5dbe926b17.png"},{"max_width":600,"max_height":600,"width":600,"height":241,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/c/1/d/c1d3a38e2cdaeba5efdff8fc10ff0a5dbe926b17_2_600x241.png"},{"max_width":400,"max_height":400,"width":400,"height":161,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/c/1/d/c1d3a38e2cdaeba5efdff8fc10ff0a5dbe926b17_2_400x161.png"},{"max_width":300,"max_height":300,"width":300,"height":120,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/c/1/d/c1d3a38e2cdaeba5efdff8fc10ff0a5dbe926b17_2_300x120.png"},{"max_width":200,"max_height":200,"width":200,"height":80,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/c/1/d/c1d3a38e2cdaeba5efdff8fc10ff0a5dbe926b17_2_200x80.png"}],"tags":[],"tags_descriptions":{},"views":460,"like_count":52,"has_summary":false,"last_poster_username":"pfaffman","category_id":179,"op_like_count":16,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"The `create-discourse-plugin` gem has been deprecated as its functionality has been integrated into Discourse core via a new rake task, `rake plugin:create`, which now provides an official, git-based solution for plugin creation without relying on GitHub CLI.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":144959,"primary_group_id":47,"flair_group_id":47},{"extras":null,"description":"Frequent Poster","user_id":23968,"primary_group_id":47,"flair_group_id":47},{"extras":"latest","description":"Most Recent Poster","user_id":15209,"primary_group_id":null,"flair_group_id":142}]},{"fancy_title":"Customize mention colors","fancy_title_localized":false,"locale":"en","id":219023,"title":"Customize mention colors","slug":"customize-mention-colors","posts_count":4,"reply_count":1,"highest_post_number":4,"image_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/6/c/6cacf59bada15e604aa436a0ada30f6c52adaf14.png","created_at":"2022-02-22T03:59:40.782Z","last_posted_at":"2023-12-13T17:04:32.023Z","bumped":true,"bumped_at":"2023-12-13T17:04:32.023Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Inspired by this topic, and the custom colors of Discord roles, I have written this very simple code that adds a data-mention to the mentions of groups and users, in this way to be able to place different colors (And not&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":[{"max_width":null,"max_height":null,"width":112,"height":31,"url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/6/c/6cacf59bada15e604aa436a0ada30f6c52adaf14.png"}],"tags":[{"id":478,"name":"how-to","slug":"how-to"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":1860,"like_count":15,"has_summary":false,"last_poster_username":"martyn_thomas","category_id":179,"op_like_count":11,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Users request adjustments to color mentions of everyone belonging to a specific group, and to identify users not in a group, building on the initial code that allows custom colors for individual mentions via CSS.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":73340,"primary_group_id":null,"flair_group_id":151},{"extras":null,"description":"Frequent Poster","user_id":63814,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":101949,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":141342,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Learn how to start building stuff for Discourse if you&rsquo;re newbie (like myself)","fancy_title_localized":false,"locale":"en","id":45954,"title":"Learn how to start building stuff for Discourse if you're newbie (like myself)","slug":"learn-how-to-start-building-stuff-for-discourse-if-youre-newbie-like-myself","posts_count":15,"reply_count":6,"highest_post_number":26,"image_url":null,"created_at":"2016-06-17T15:22:19.799Z","last_posted_at":"2023-10-15T20:19:53.785Z","bumped":true,"bumped_at":"2023-10-15T20:19:53.785Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"There are a few ‘how to start’ guides for working with Discourse already and a wealth of useful info on meta, but I thought it might help to give an insight to the mental processes of starting from little, if any, prior &hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[{"id":479,"name":"explanation","slug":"explanation"}],"tags_descriptions":{},"views":29769,"like_count":319,"has_summary":false,"last_poster_username":"elle7","category_id":179,"op_like_count":238,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"A beginner's guide to building Discourse plugins is shared, emphasizing learning basics like widgets, Ember.js, and code structure, with community members confirming its usefulness and noting updates to code references and tools.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":13378,"primary_group_id":null,"flair_group_id":142},{"extras":null,"description":"Frequent Poster","user_id":67228,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":68923,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":125384,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":139330,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Installing the Discourse development environment on Ubuntu","fancy_title_localized":true,"locale":"zh_CN","id":248481,"title":":cn: Installing the Discourse development environment on Ubuntu 在 Ubuntu 上安装 Discourse 开发环境","slug":"installing-the-discourse-development-environment-on-ubuntu-ubuntu-discourse","posts_count":6,"reply_count":3,"highest_post_number":9,"image_url":"https://d11a6trkgmumsb.cloudfront.net/original/4X/7/a/b/7abf3e163b634e6055a850caf0b974004f9e01df.png","created_at":"2022-12-10T14:06:22.413Z","last_posted_at":"2023-10-13T06:20:08.282Z","bumped":true,"bumped_at":"2023-10-13T06:20:08.282Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"&lt;div&gt;&lt;/div&gt;\n\n\n:warning: This guide is only for configuring the Discourse development environment. If you need to install Discourse in a production environment, please refer to the content on the page: Install Discourse i&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"unicode_title":"🇨🇳 Installing the Discourse development environment on Ubuntu 在 Ubuntu 上安装 Discourse 开发环境","thumbnails":[{"max_width":null,"max_height":null,"width":690,"height":375,"url":"https://d11a6trkgmumsb.cloudfront.net/original/4X/7/a/b/7abf3e163b634e6055a850caf0b974004f9e01df.png"},{"max_width":600,"max_height":600,"width":600,"height":326,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/7/a/b/7abf3e163b634e6055a850caf0b974004f9e01df_2_600x326.png"},{"max_width":400,"max_height":400,"width":400,"height":217,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/7/a/b/7abf3e163b634e6055a850caf0b974004f9e01df_2_400x217.png"},{"max_width":300,"max_height":300,"width":300,"height":163,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/7/a/b/7abf3e163b634e6055a850caf0b974004f9e01df_2_300x163.png"},{"max_width":200,"max_height":200,"width":200,"height":108,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/4X/7/a/b/7abf3e163b634e6055a850caf0b974004f9e01df_2_200x108.png"}],"tags":[{"id":150,"name":"dev-install","slug":"dev-install"}],"tags_descriptions":{"dev-install":"Instructions and issues with installing Discourse for development"},"views":1999,"like_count":6,"has_summary":false,"last_poster_username":"scavin","category_id":179,"op_like_count":2,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Clarification provided on setting up a Discourse development environment in Ubuntu, specifically regarding creating a user with the same name as the Ubuntu system username, with users expressing gratitude for the clarification.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":79292,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":119102,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":138598,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":14617,"primary_group_id":null,"flair_group_id":50}]},{"fancy_title":"Package a Discourse plugin as a gem","fancy_title_localized":false,"locale":"en","id":273036,"title":"Package a Discourse plugin as a gem","slug":"package-a-discourse-plugin-as-a-gem","posts_count":5,"reply_count":3,"highest_post_number":5,"image_url":null,"created_at":"2023-07-27T11:41:29.486Z","last_posted_at":"2023-07-27T16:59:01.681Z","bumped":true,"bumped_at":"2023-07-27T16:59:01.681Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Pavilion has started to package some Discourse plugins as ruby gems, starting with our subscription client. \n\n\nOur subscription client is still a separate plugin which now loads this gem, but it’s backend is now entirely&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[{"id":478,"name":"how-to","slug":"how-to"},{"id":274,"name":"plugin-guides","slug":"plugin-guides"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":608,"like_count":19,"has_summary":false,"last_poster_username":"merefield","category_id":179,"op_like_count":14,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Packaging a Discourse plugin as a gem is suitable for backend components, but not for theme-related frontend code, which requires separate handling.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":13378,"primary_group_id":null,"flair_group_id":142},{"extras":null,"description":"Frequent Poster","user_id":45577,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":27384,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Insertable, centrally maintained text/markdown snippets","fancy_title_localized":false,"locale":"en","id":97246,"title":"Insertable, centrally maintained text/markdown snippets","slug":"insertable-centrally-maintained-text-markdown-snippets","posts_count":10,"reply_count":1,"highest_post_number":10,"image_url":null,"created_at":"2018-09-15T07:17:42.016Z","last_posted_at":"2023-07-23T05:28:29.561Z","bumped":true,"bumped_at":"2023-07-23T07:03:44.781Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"I was wondering if there was any way I could define a string of text in a single place and insert it within posts with a single, short reference. \nIt’s a bit like the out of the box Admin -&gt; Customize -&gt; Text Content, bu&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[{"id":482,"name":"reference","slug":"reference"}],"tags_descriptions":{},"views":3674,"like_count":37,"has_summary":false,"last_poster_username":"denvergeeks","category_id":179,"op_like_count":3,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Users discuss implementing insertable, centrally managed text/markdown snippets in Discourse, with proposed solutions including a trigger string expanding to markdown, a composer button, or a plugin with configurable snippets.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":27384,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":34674,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":13093,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":98881,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":72263,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Set up a smart chatbot on discourse :robot:","fancy_title_localized":false,"locale":"en","id":82632,"title":"Set up a smart chatbot on discourse :robot:","slug":"set-up-a-smart-chatbot-on-discourse","posts_count":15,"reply_count":8,"highest_post_number":16,"image_url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/e/c/ec96c1fb651b7b4ac62c75a3f0b352f2610c6211_2_1024x516.gif","created_at":"2018-03-09T16:50:11.492Z","last_posted_at":"2023-02-09T00:52:36.718Z","bumped":true,"bumped_at":"2023-02-09T00:52:36.718Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Hello, \nAfter weeks of tinkering, I finally managed to set up an AI bot, similar to discobot but one that learns and is more responsive.  Here is how I did it for anyone interested in setting it up.  There is quite a few&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"unicode_title":"Set up a smart chatbot on discourse 🤖","thumbnails":[{"max_width":null,"max_height":null,"width":1200,"height":605,"url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/c/ec96c1fb651b7b4ac62c75a3f0b352f2610c6211.gif"},{"max_width":1024,"max_height":1024,"width":1024,"height":516,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/e/c/ec96c1fb651b7b4ac62c75a3f0b352f2610c6211_2_1024x516.gif"},{"max_width":800,"max_height":800,"width":800,"height":403,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/e/c/ec96c1fb651b7b4ac62c75a3f0b352f2610c6211_2_800x403.gif"},{"max_width":600,"max_height":600,"width":600,"height":302,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/e/c/ec96c1fb651b7b4ac62c75a3f0b352f2610c6211_2_600x302.gif"},{"max_width":400,"max_height":400,"width":400,"height":201,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/e/c/ec96c1fb651b7b4ac62c75a3f0b352f2610c6211_2_400x201.gif"},{"max_width":300,"max_height":300,"width":300,"height":151,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/e/c/ec96c1fb651b7b4ac62c75a3f0b352f2610c6211_2_300x151.gif"},{"max_width":200,"max_height":200,"width":200,"height":100,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/e/c/ec96c1fb651b7b4ac62c75a3f0b352f2610c6211_2_200x100.gif"}],"tags":[{"id":478,"name":"how-to","slug":"how-to"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":9126,"like_count":70,"has_summary":false,"last_poster_username":"SimonBiggs","category_id":179,"op_like_count":38,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"A user seeks clarification on the setup guide for a smart chatbot on Discourse, indicating potential difficulties in following the instructions.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":29613,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":36855,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":66060,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":55682,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":129042,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Add copyright protection to tagged topics","fancy_title_localized":false,"locale":"en","id":208970,"title":"Add copyright protection to tagged topics","slug":"add-copyright-protection-to-tagged-topics","posts_count":15,"reply_count":10,"highest_post_number":15,"image_url":null,"created_at":"2021-11-12T12:28:40.116Z","last_posted_at":"2022-12-17T14:46:39.178Z","bumped":true,"bumped_at":"2022-12-17T14:46:39.178Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Hello, \nMany of our Member have quality topics, blog articles etc… Unfortunately others steal these (and make it public other sites as their own without any source) even if the author says clearly. “I only write it to th&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[{"id":478,"name":"how-to","slug":"how-to"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":1823,"like_count":43,"has_summary":false,"last_poster_username":"wendellverli","category_id":179,"op_like_count":18,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"A copyright protection solution for tagged topics has been implemented and packaged into a Theme Component, with additional features to disable video downloads and right-click context menus, addressing concerns from users and improving content protection.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":78445,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":27384,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":109684,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":83631,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":124068,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Custom Discourse Reactions","fancy_title_localized":false,"locale":"en","id":198043,"title":"Custom Discourse Reactions","slug":"custom-discourse-reactions","posts_count":14,"reply_count":7,"highest_post_number":14,"image_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/0/e0056318f848ada8e7d3f721c5b974da73222ccd.gif","created_at":"2021-07-24T02:06:56.491Z","last_posted_at":"2022-05-29T15:40:23.040Z","bumped":true,"bumped_at":"2022-05-29T15:40:23.040Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Hello, \nI made some CSS modification on Discourse Reactions Plugin. So it looks much like Facebook reaction buttons. \nThese for 6 reaction buttons including the default which is on my site is :heart: . \nCOMMON / SCSS \nPl&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":[{"max_width":null,"max_height":null,"width":502,"height":176,"url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/0/e0056318f848ada8e7d3f721c5b974da73222ccd.gif"},{"max_width":400,"max_height":400,"width":400,"height":140,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/e/0/e0056318f848ada8e7d3f721c5b974da73222ccd_2_400x140.gif"},{"max_width":300,"max_height":300,"width":300,"height":105,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/e/0/e0056318f848ada8e7d3f721c5b974da73222ccd_2_300x105.gif"},{"max_width":200,"max_height":200,"width":200,"height":70,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/e/0/e0056318f848ada8e7d3f721c5b974da73222ccd_2_200x70.gif"}],"tags":[{"id":482,"name":"reference","slug":"reference"}],"tags_descriptions":{},"views":2864,"like_count":82,"has_summary":false,"last_poster_username":"Don","category_id":179,"op_like_count":25,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Custom Discourse Reactions are now available as a theme component, offering easier use, fixes, and settings, including reaction label, picker and panel rounding, and options to hide user lists and who liked sections.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":78445,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":62294,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":19473,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":102068,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":67026,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Setup Code blocks that stand out, per-language backgrounds","fancy_title_localized":false,"locale":"en","id":57255,"title":"Setup Code blocks that stand out, per-language backgrounds","slug":"setup-code-blocks-that-stand-out-per-language-backgrounds","posts_count":4,"reply_count":6,"highest_post_number":4,"image_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/f/efed2b833ae3f2570e6ada665d4f60aef6303557.png","created_at":"2017-02-11T23:23:52.641Z","last_posted_at":"2022-02-10T22:39:38.471Z","bumped":true,"bumped_at":"2022-02-10T22:45:23.062Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Here’s a really quick and easy CSS change that may benefit forums where people post code in a few different languages. \nAt least with the languages we use, Discourse does a great job of guessing which language code is in&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":[{"max_width":null,"max_height":null,"width":716,"height":221,"url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/e/f/efed2b833ae3f2570e6ada665d4f60aef6303557.png"},{"max_width":600,"max_height":600,"width":600,"height":185,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/e/f/efed2b833ae3f2570e6ada665d4f60aef6303557_2_600x185.png"},{"max_width":400,"max_height":400,"width":400,"height":123,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/e/f/efed2b833ae3f2570e6ada665d4f60aef6303557_2_400x123.png"},{"max_width":300,"max_height":300,"width":300,"height":92,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/e/f/efed2b833ae3f2570e6ada665d4f60aef6303557_2_300x92.png"},{"max_width":200,"max_height":200,"width":200,"height":61,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/e/f/efed2b833ae3f2570e6ada665d4f60aef6303557_2_200x61.png"}],"tags":[{"id":478,"name":"how-to","slug":"how-to"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":3299,"like_count":30,"has_summary":false,"last_poster_username":"tobiaseigen","category_id":179,"op_like_count":20,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Users suggest improvements to the code block design, proposing to extract the language name from the class instead of using images, or using CSS to add the language text via `:before` or `:after` pseudo-elements.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":26605,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":1995,"primary_group_id":47,"flair_group_id":47},{"extras":null,"description":"Frequent Poster","user_id":28866,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":8571,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Create a custom badge with an image through the API","fancy_title_localized":false,"locale":"en","id":210616,"title":"Create a custom badge with an image through the API","slug":"create-a-custom-badge-with-an-image-through-the-api","posts_count":3,"reply_count":0,"highest_post_number":3,"image_url":null,"created_at":"2021-12-01T00:14:48.335Z","last_posted_at":"2021-12-05T19:41:55.739Z","bumped":true,"bumped_at":"2021-12-07T01:28:19.597Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Sure, the included badges are … nice. Nothing wrong with them at all. But, what if you want more? What if you want to go beyond the pre-defined symbol set? Sure, there’s an admin page where you can upload them. But what &hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[{"id":330,"name":"rest-api","slug":"rest-api"},{"id":478,"name":"how-to","slug":"how-to"},{"id":2,"name":"badges","slug":"badges"}],"tags_descriptions":{"rest-api":"Topics about making an external request to Discourse","how-to":"How to guides contain steps to follow to solve a specific problem","badges":""},"views":1972,"like_count":12,"has_summary":false,"last_poster_username":"mattdm","category_id":179,"op_like_count":7,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Creating custom badges through the API no longer requires a global admin key, but instead specific API key permissions, and uploading images requires \"upload\" permission in a separate section from badges API permissions.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":5795,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Redirect an existing route in a theme component","fancy_title_localized":false,"locale":"en","id":201900,"title":"Redirect an existing route in a theme component","slug":"redirect-an-existing-route-in-a-theme-component","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2021-08-27T12:33:37.464Z","last_posted_at":"2021-08-27T12:33:37.625Z","bumped":true,"bumped_at":"2021-08-27T12:33:37.625Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"To redirect an existing Discourse route in a theme component, you can use api.modifyClass to modify the route class. \nMore information can be found in the Ember documentation on routing redirection. Here’s an example: \n&lt;s&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[{"id":478,"name":"how-to","slug":"how-to"},{"id":820,"name":"theme-guides","slug":"theme-guides"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":1390,"like_count":8,"has_summary":false,"last_poster_username":"JonathanShaw","category_id":179,"op_like_count":8,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Use `api.modifyClass` to modify a Discourse route class, enabling redirection in a theme component, with options to load data asynchronously using promise returns for conditional redirect decisions.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":85965,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Customize the loading icon","fancy_title_localized":false,"locale":"en","id":165743,"title":"Customize the loading icon","slug":"customize-the-loading-icon","posts_count":8,"reply_count":4,"highest_post_number":10,"image_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/5/9/59a6848d38aaa5c6fbfb78ff9fe35c48f757c0fc.png","created_at":"2020-09-29T15:37:30.454Z","last_posted_at":"2021-06-16T18:12:06.469Z","bumped":true,"bumped_at":"2021-06-16T18:12:06.469Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Customize the loading icon\nNote that it changes the main loading icon, but not the small loading icon (composer, search menu, etc). \n\n\nEdit your current theme or create a new theme component. \n\n\nGo in &lt;/head&gt; and paste t&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":[{"max_width":null,"max_height":null,"width":61,"height":52,"url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/5/9/59a6848d38aaa5c6fbfb78ff9fe35c48f757c0fc.png"}],"tags":[{"id":478,"name":"how-to","slug":"how-to"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":3210,"like_count":37,"has_summary":false,"last_poster_username":"Johnny_McIvor","category_id":179,"op_like_count":26,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Users explore customizing the Discourse loading icon, with one successfully replacing the small spinner globally, while others inquire about using GIFs or static images, with the current limitation being no GIF support.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":35474,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":78445,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":33297,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":96216,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Our solution for blurring NSFW content","fancy_title_localized":false,"locale":"en","id":124584,"title":"Our solution for blurring NSFW content","slug":"our-solution-for-blurring-nsfw-content","posts_count":10,"reply_count":9,"highest_post_number":22,"image_url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/0/0/0040c0a0e1d99176a752e2927f02e0985a7ebd01_2_1024x382.jpeg","created_at":"2019-08-01T07:38:30.472Z","last_posted_at":"2020-11-14T22:56:30.466Z","bumped":true,"bumped_at":"2020-11-14T22:56:30.466Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"At the Blender Artists forum we have a faily liberal content policy where we allow nudity and violence (up to a point). While most members are fine with this kind of content, there are of course audiences and situations &hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":[{"max_width":null,"max_height":null,"width":1586,"height":592,"url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/0/0/0040c0a0e1d99176a752e2927f02e0985a7ebd01.jpeg"},{"max_width":1024,"max_height":1024,"width":1024,"height":382,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/0/0/0040c0a0e1d99176a752e2927f02e0985a7ebd01_2_1024x382.jpeg"},{"max_width":800,"max_height":800,"width":800,"height":298,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/0/0/0040c0a0e1d99176a752e2927f02e0985a7ebd01_2_800x298.jpeg"},{"max_width":600,"max_height":600,"width":600,"height":223,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/0/0/0040c0a0e1d99176a752e2927f02e0985a7ebd01_2_600x223.jpeg"},{"max_width":400,"max_height":400,"width":400,"height":149,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/0/0/0040c0a0e1d99176a752e2927f02e0985a7ebd01_2_400x149.jpeg"},{"max_width":300,"max_height":300,"width":300,"height":111,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/0/0/0040c0a0e1d99176a752e2927f02e0985a7ebd01_2_300x111.jpeg"},{"max_width":200,"max_height":200,"width":200,"height":74,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/0/0/0040c0a0e1d99176a752e2927f02e0985a7ebd01_2_200x74.jpeg"}],"tags":[{"id":479,"name":"explanation","slug":"explanation"},{"id":813,"name":"content","slug":"content"}],"tags_descriptions":{},"views":10293,"like_count":83,"has_summary":false,"last_poster_username":"codinghorror","category_id":179,"op_like_count":55,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Discussion on implementing NSFW content blurring continues, with proposed solutions for mobile and hover issues, including click-based reveal and potential plugin development, as well as custom modifications for alternative use cases.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":12801,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":35474,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":71403,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":66204,"primary_group_id":47,"flair_group_id":47},{"extras":"latest","description":"Most Recent Poster","user_id":32,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Use Node-Red and Telegram to Monitor Discourse Status","fancy_title_localized":false,"locale":"en","id":157229,"title":"Use Node-Red and Telegram to Monitor Discourse Status","slug":"use-node-red-and-telegram-to-monitor-discourse-status","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/3/b/3b0c191e3b5b32d85ef6003e733f00eda047ebb9_2_575x1024.png","created_at":"2020-07-09T07:17:02.690Z","last_posted_at":"2020-07-09T07:17:02.864Z","bumped":true,"bumped_at":"2020-07-09T07:17:02.864Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Please note that this is a different application than sending Discourse application notifications using the Discourse Telegram Notifications plugin.   This NR application is for monitoring the server, Docker and the Dis&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":[{"max_width":null,"max_height":null,"width":750,"height":1334,"url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/3/b/3b0c191e3b5b32d85ef6003e733f00eda047ebb9.png"},{"max_width":1024,"max_height":1024,"width":575,"height":1024,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/3/b/3b0c191e3b5b32d85ef6003e733f00eda047ebb9_2_575x1024.png"},{"max_width":800,"max_height":800,"width":449,"height":800,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/3/b/3b0c191e3b5b32d85ef6003e733f00eda047ebb9_2_449x800.png"},{"max_width":600,"max_height":600,"width":337,"height":600,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/3/b/3b0c191e3b5b32d85ef6003e733f00eda047ebb9_2_337x600.png"},{"max_width":400,"max_height":400,"width":224,"height":400,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/3/b/3b0c191e3b5b32d85ef6003e733f00eda047ebb9_2_224x400.png"},{"max_width":300,"max_height":300,"width":168,"height":300,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/3/b/3b0c191e3b5b32d85ef6003e733f00eda047ebb9_2_168x300.png"},{"max_width":200,"max_height":200,"width":112,"height":200,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/3/b/3b0c191e3b5b32d85ef6003e733f00eda047ebb9_2_112x200.png"}],"tags":[{"id":478,"name":"how-to","slug":"how-to"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":2537,"like_count":4,"has_summary":false,"last_poster_username":"neounix","category_id":179,"op_like_count":4,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Neounix shares a Node-Red and Telegram setup for monitoring a Discourse server, Docker, and application, providing real-time alerts and checks, with plans for future expansion of Docker and Discourse monitoring functions.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":75906,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Use Ember.PromiseProxyMixin in a theme","fancy_title_localized":false,"locale":"en","id":147231,"title":"Use Ember.PromiseProxyMixin in a theme","slug":"use-ember-promiseproxymixin-in-a-theme","posts_count":2,"reply_count":0,"highest_post_number":2,"image_url":null,"created_at":"2020-04-08T08:21:39.507Z","last_posted_at":"2020-04-08T10:01:08.796Z","bumped":true,"bumped_at":"2020-04-08T10:01:08.796Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Recently the Ember.PromiseProxyMixin was added to ember modules in the discourse core. \n\n\nIt’s very useful Ember mixin which allows you to make async requests and to work easily with Promises inside Ember components. Thi&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[{"id":478,"name":"how-to","slug":"how-to"},{"id":820,"name":"theme-guides","slug":"theme-guides"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":1338,"like_count":9,"has_summary":false,"last_poster_username":"j.jaffeux","category_id":179,"op_like_count":4,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Discourse now includes Ember.PromiseProxyMixin, allowing easier work with Promises in components, with potential for theme and plugin development, and plans to explore and simplify its application in the Discourse codebase.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":null,"description":"Original Poster","user_id":74650,"primary_group_id":null,"flair_group_id":null},{"extras":"latest","description":"Most Recent Poster","user_id":23163,"primary_group_id":47,"flair_group_id":47}]},{"fancy_title":"Use the API to create restricted categories for external groups","fancy_title_localized":false,"locale":"en","id":139107,"title":"Use the API to create restricted categories for external groups","slug":"use-the-api-to-create-restricted-categories-for-external-groups","posts_count":1,"reply_count":0,"highest_post_number":1,"image_url":null,"created_at":"2020-01-19T18:31:12.605Z","last_posted_at":"2020-01-19T18:31:12.721Z","bumped":true,"bumped_at":"2020-01-19T18:31:12.721Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"If you have a community site that also (but not exclusively) uses Discourse, you may want to provide a restricted subforum for each of your groups, for example as a workspace. Here’s how, in Ruby: \n\n\nEnsure that your API&hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":null,"tags":[{"id":330,"name":"rest-api","slug":"rest-api"},{"id":478,"name":"how-to","slug":"how-to"}],"tags_descriptions":{"rest-api":"Topics about making an external request to Discourse","how-to":"How to guides contain steps to follow to solve a specific problem"},"views":1283,"like_count":5,"has_summary":false,"last_poster_username":"Judith","category_id":179,"op_like_count":5,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Create restricted subforums for external groups in Discourse by authenticating API calls as an admin, creating a group, and programmatically generating a subforum accessible only to that group.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":"latest single","description":"Original Poster, Most Recent Poster","user_id":39022,"primary_group_id":null,"flair_group_id":null}]},{"fancy_title":"Display star ratings for Discourse pages in search engine results (SERPs)","fancy_title_localized":false,"locale":"en","id":84316,"title":"Display star ratings for Discourse pages in search engine results (SERPs)","slug":"display-star-ratings-for-discourse-pages-in-search-engine-results-serps","posts_count":14,"reply_count":7,"highest_post_number":14,"image_url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/5/9/595832e5dcdce03e82bbcedf2f398762e8f3d774.png","created_at":"2018-04-01T09:23:45.361Z","last_posted_at":"2019-04-26T10:31:01.659Z","bumped":true,"bumped_at":"2019-04-26T10:31:01.659Z","archetype":"regular","unseen":false,"pinned":false,"unpinned":null,"excerpt":"Displaying star rating with Discourse is easy. I am happy to share, It can be done in simple few steps \nProcess \n\n\nSetup Google Tag Manager for your Discourse Application \n \n\n\nAdd a new HTML Tag containing JSON-LD markup &hellip;","visible":true,"closed":false,"archived":false,"bookmarked":null,"liked":null,"thumbnails":[{"max_width":null,"max_height":null,"width":555,"height":270,"url":"https://d11a6trkgmumsb.cloudfront.net/original/3X/5/9/595832e5dcdce03e82bbcedf2f398762e8f3d774.png"},{"max_width":400,"max_height":400,"width":400,"height":194,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/5/9/595832e5dcdce03e82bbcedf2f398762e8f3d774_2_400x194.png"},{"max_width":300,"max_height":300,"width":300,"height":145,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/5/9/595832e5dcdce03e82bbcedf2f398762e8f3d774_2_300x145.png"},{"max_width":200,"max_height":200,"width":200,"height":97,"url":"https://d11a6trkgmumsb.cloudfront.net/optimized/3X/5/9/595832e5dcdce03e82bbcedf2f398762e8f3d774_2_200x97.png"}],"tags":[{"id":478,"name":"how-to","slug":"how-to"}],"tags_descriptions":{"how-to":"How to guides contain steps to follow to solve a specific problem"},"views":3785,"like_count":39,"has_summary":false,"last_poster_username":"Gulshan_Kumar","category_id":179,"op_like_count":8,"pinned_globally":false,"featured_link":null,"ai_topic_gist":"Discourse's Google Tag Manager (GTM) support has been updated to add code to the head, resolving an issue with displaying star ratings in search engine results pages (SERPs) using GTM and JSON-LD markup.","is_nested_view":null,"has_accepted_answer":false,"can_vote":false,"posters":[{"extras":"latest","description":"Original Poster, Most Recent Poster","user_id":38013,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":6626,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":13378,"primary_group_id":null,"flair_group_id":142},{"extras":null,"description":"Frequent Poster","user_id":2,"primary_group_id":null,"flair_group_id":null},{"extras":null,"description":"Frequent Poster","user_id":30818,"primary_group_id":null,"flair_group_id":null}]}]}}