Given how easy it is to move to a different Mastodon instance, it will be interesting to see in the coming months to see how many new folks will live in the "big cities", how many will move to small towns, and how many will start their own homesteads.

@lwriemen Good question! Likely closer to a town since this instance has somewhat unusual rules (no federated/local timelines, no DMs) which, while we think has a lot of benefits, isn't for everyone.

@kyle Hmmm. I was thinking more along the lines of membership, but I imagine the answer is the same. Differing rules is the definition of federation.

@kyle I honestly thought about setting up my own instance - I ran one briefly in 2017 as proof-of-concept. But holy crap, I hate administering email - running an instance just doesn't sound "fun" in this day and age for me anymore.

@Wildbill As someone who administers his own email (which is pretty low effort at this point), I suspect if you don't want to do that you definitely wouldn't want to set up your own instance. From what I've heard from @shawnp0wers it seems like a fair amount of effort.

@kyle @Wildbill @shawnp0wers I’m planning to give masto.host a try for the podcast when it opens back up.

@katherined @kyle @Wildbill The setup, following the directions on their site, wasn't too difficult.

The part that is... uncomfortable is that it uses a lot of Ruby, and while it seems pretty stable, I don't understand the underlying infrastructure enough to really trust I could troubleshoot it when stuff goes wrong. It also uses yarn to install javascript stuff... it just feels like a house of cards a bit.

@shawnp0wers @katherined @kyle yeah. The setup — even back when I did it in 2017 — was the easy part. Ongoing maintenance cuts severely into my fucking off time these days. I value my vegetative time.

@Wildbill @shawnp0wers @katherined Interesting! At least for my own server the maintenance has been relatively minimal. Mostly the kind of things you'd expect running any small service.

@kyle @katherined @Wildbill The maintenance doesn’t seem bad at this point. I just fear trying to repair it when something goes wrong.

@katherined @kyle @shawnp0wers Yeah, I'm pretty sure it's not a big deal to do it, I am just in the mode of jettisoning all non-essential things for me to monitor and worry about. If someone else can do it 95% as good as me or better, I'm gonna let them. :)

@Kyle Rankin I agree moving is a nice feature in mastodon , but it kinda feels like changing your email address. that's why I like the nomadic identity of Hubzilla #^Hubzilla project



Hubzilla is a powerful platform for creating interconnected websites featuring a
decentralized identity, communications, and permissions framework built using common webserver technology.



var baseurl="https://hub.stephenson.cc";

var aStr = { 'delitem' : "Delete this item?", 'itemdel' : "Item deleted", 'comment' : "Comment", 'showmore' : " show all", 'showfewer' : " show less", 'divgrowmore' : " expand", 'divgrowless' : " collapse", 'pwshort' : "Password too short", 'pwnomatch' : "Passwords do not match", 'everybody' : "everybody", 'passphrase' : "Secret Passphrase", 'passhint' : "Passphrase hint", 'permschange' : "Notice: Permissions have changed but have not yet been submitted.", 'closeAll' : "close all", 'nothingnew' : "Nothing new here", 'rating_desc' : "Rate This Channel (this is public)", 'rating_val' : "Rating", 'rating_text' : "Describe (optional)", 'submit' : "Submit", 'linkurl' : "Please enter a link URL", 'leavethispage' : "Unsaved changes. Are you sure you wish to leave this page?", 'location' : "Location", 'lovely' : "lovely", 'wonderful' : "wonderful", 'fantastic' : "fantastic", 'great' : "great", 'nick_invld1' : "Your chosen nickname was either already taken or not valid. Please use our suggestion (", 'nick_invld2' : ") or enter a new one.", 'nick_valid' : "Thank you, this nickname is valid.", 'name_empty' : "A channel name is required.", 'name_ok1' : "This is a ", 'name_ok2' : " channel name", 'to_reply' : "Back to reply", 'pinned' : "Pinned", 'pin_item' : "Pin to the top", 'unpin_item' : "Unpin from the top", 'plural_func' : "0", 't01' : "", 't02' : "", 't03' : "ago", 't04' : "from now", 't05' : "less than a minute", 't06' : "about a minute", 't07' : "%d minutes", 't08' : "about an hour", 't09' : "about %d hours", 't10' : "a day", 't11' : "%d days", 't12' : "about a month", 't13' : "%d months", 't14' : "about a year", 't15' : "%d years", 't16' : " ", 't17' : "[]", 'monthNames' : [ "January","February","March","April","May","June","July","August","September","October","November","December" ], 'monthNamesShort' : [ "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" ], 'dayNames' : ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], 'dayNamesShort' : ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], 'today' : "today", 'month' : "month", 'week' : "week", 'day' : "day", 'allday' : "All day", // mod cloud 'download_info' : "Please stand by while your download is being prepared.", // mod register 'email_not_valid' : "Email address not valid", 'email_required' : "Required" };

var updateInterval = 40000; var sse_enabled = 0; var localUser = 3; var zid = 'netnut404@hub.stephenson.cc'; var justifiedGalleryActive = false; var channelId = false; var preloadImages = 0; var auto_save_draft = false; var module = 'linkinfo';

$(document).ready(function() { $("#nav-search-text").search_autocomplete('https://hub.stephenson.cc/acl');});




View Profile
Edit Profile
Channels
Grant Stephenson
NetNut404

Settings

Admin

Logout







<div id="banner" class="navbar-text">Hubzilla</div> <ul id="nav-right" class="navbar-nav"> <li class="nav-item collapse clearfix" id="nav-search"> <form class="form-inline" method="get" action="search" role="search"> <input class="form-control form-control-sm mt-1 me-2" id="nav-search-text" type="text" value="" placeholder="@name, #tag, ?doc, content" name="search" title="Search site @name, !forum, #tag, ?docs, content" onclick="this.submit();" onblur="closeMenu('nav-search'); openMenu('nav-search-btn');"/> </form> <div id="nav-search-spinner" class="spinner-wrapper"> <div class="spinner s"></div> </div> </li> <li class="nav-item" id="nav-search-btn"> <a class="nav-link" href="#nav-search" title="Search site @name, !forum, #tag, ?docs, content" onclick="openMenu('nav-search'); closeMenu('nav-search-btn'); $('#nav-search-text').focus(); return false;"><i class="fa fa-fw fa-search"></i></a> </li> <li id="notifications-btn" class="nav-item d-xl-none"> <a class="nav-link text-white notifications-btn" href="#><i id=notifications-btn-icon" class="fa fa-exclamation-circle notifications-btn-icon"></i></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/cdav/calendar&quot; title="Calendar"> <i class="fa fa-fw fa-calendar"></i><span class="d-lg-none">Calendar</span></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/cdav/addressbook&quot; title="CardDAV"> <i class="fa fa-fw fa-vcard-o"></i><span class="d-lg-none">CardDAV</span></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/hq&quot; title="HQ"> <i class="fa fa-fw fa-user-circle-o"></i><span class="d-lg-none">HQ</span></a> </li> <li class="nav-app-sortable"> </li> <li class="nav-item dropdown" id="app-menu"> <a class="nav-link" href="# data-bs-toggle=offcanvas" data-bs-target="#app-bin" aria-controls="app-bin"><i class="fa fa-fw fa-bars"></i></a> </li> </ul> </div> </div>



Pinned Apps



Calendar




CardDAV




HQ


Featured Apps

Directory

Photos

Search

Webpages

Twitter Crosspost Connector

Files

Affinity Tool

Channel

Channel Export

Channel Sources

Connections

Gallery

OAuth2 Apps Manager

Public Stream

Stream

Apps

var app_bin = document.getElementById('app-bin-container'); new Sortable(app_bin, { animation: 150, delay: 200, delayOnTouchOnly: true, onStart: function (e) { $('#app-bin-trash').removeClass('d-none'); }, onEnd: function (e) { $('#app-bin-trash').addClass('d-none'); let app_str = ''; $('#app-bin-container a:visible').each(function () { if(app_str.length) { app_str = app_str.concat(',', this.text); } else { app_str = app_str.concat(this.text); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_order', 'v' : app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); var nav_app_bin = document.getElementById('nav-right'); new Sortable(nav_app_bin, { animation: 150, delay: 200, delayOnTouchOnly: true, draggable: '.nav-app-sortable', onEnd: function (e) { let nav_app_str = ''; $('#nav-right .nav-app-sortable').each(function () { if(nav_app_str.length) { nav_app_str = nav_app_str.concat(',', $(this).text()); } else { nav_app_str = nav_app_str.concat($(this).text()); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_pin_order', 'v' : nav_app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); var nav_app_bin_container = document.getElementById('nav-app-bin-container'); new Sortable(nav_app_bin_container, { animation: 150, delay: 200, delayOnTouchOnly: true, onEnd: function (e) { let nav_app_str = ''; $('#nav-app-bin-container a').each(function () { if(nav_app_str.length) { nav_app_str = nav_app_str.concat(',', $(this).text()); } else { nav_app_str = nav_app_str.concat($(this).text()); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_pin_order', 'v' : nav_app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); $('#nav-right').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', '0px 0px 3px red inset'); }); $('#nav-right').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); }); $('#nav-right').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_pinned_app', 'papp' : papp } }) .done( function() { $('').insertBefore('#app-menu'); }); }); $('#app-menu').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', '0px 0px 1px red inset'); }); $('#app-menu').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); }); $('#app-menu').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_featured_app', 'papp' : papp } }) .done( function() { $('' + app_name + '').appendTo('#app-bin-container'); }); }); $('#app-bin-trash').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $('#app-bin-container a[href=\'' + app_url + '\']').fadeOut(); }); $('#app-bin-trash').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $('#app-bin-container a[href=\'' + app_url + '\']').fadeIn(); }); $('#app-bin-trash').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_featured_app', 'papp' : papp } }); }); var papp, app_icon, app_url; $(document).on('dragstart', function (e) { papp = e.target.dataset.papp || null; app_icon = e.target.dataset.icon || null; app_url = e.target.dataset.url || null; app_name = e.target.dataset.name || null; });

<main> <div class="content"> <div class="columns"> <aside id="region_1"><div class="aside_spacer_top_left"></div><div class="aside_spacer_left"><div id="left_aside_wrapper" class="aside_wrapper"></div></div></aside> <section id="region_2"><!-- Root element of PhotoSwipe. Must have class pswp. -->

<div id="page-footer"></div> <div id="pause"></div> </section> <aside id="region_3" class="d-none d-xl-block"><div class="aside_spacer_top_right"></div><div class="aside_spacer_right"><div id="right_aside_wrapper" class="aside_wrapper"></div></div></aside> </div> </div></main><footer></footer>
@Kyle Rankin I agree moving is a nice feature in mastodon , but it kinda feels like changing your email address. that's why I like the nomadic identity of Hubzilla #^Hubzilla project



Hubzilla is a powerful platform for creating interconnected websites featuring a
decentralized identity, communications, and permissions framework built using common webserver technology.



var baseurl="https://hub.stephenson.cc";

var aStr = { 'delitem' : "Delete this item?", 'itemdel' : "Item deleted", 'comment' : "Comment", 'showmore' : " show all", 'showfewer' : " show less", 'divgrowmore' : " expand", 'divgrowless' : " collapse", 'pwshort' : "Password too short", 'pwnomatch' : "Passwords do not match", 'everybody' : "everybody", 'passphrase' : "Secret Passphrase", 'passhint' : "Passphrase hint", 'permschange' : "Notice: Permissions have changed but have not yet been submitted.", 'closeAll' : "close all", 'nothingnew' : "Nothing new here", 'rating_desc' : "Rate This Channel (this is public)", 'rating_val' : "Rating", 'rating_text' : "Describe (optional)", 'submit' : "Submit", 'linkurl' : "Please enter a link URL", 'leavethispage' : "Unsaved changes. Are you sure you wish to leave this page?", 'location' : "Location", 'lovely' : "lovely", 'wonderful' : "wonderful", 'fantastic' : "fantastic", 'great' : "great", 'nick_invld1' : "Your chosen nickname was either already taken or not valid. Please use our suggestion (", 'nick_invld2' : ") or enter a new one.", 'nick_valid' : "Thank you, this nickname is valid.", 'name_empty' : "A channel name is required.", 'name_ok1' : "This is a ", 'name_ok2' : " channel name", 'to_reply' : "Back to reply", 'pinned' : "Pinned", 'pin_item' : "Pin to the top", 'unpin_item' : "Unpin from the top", 'plural_func' : "0", 't01' : "", 't02' : "", 't03' : "ago", 't04' : "from now", 't05' : "less than a minute", 't06' : "about a minute", 't07' : "%d minutes", 't08' : "about an hour", 't09' : "about %d hours", 't10' : "a day", 't11' : "%d days", 't12' : "about a month", 't13' : "%d months", 't14' : "about a year", 't15' : "%d years", 't16' : " ", 't17' : "[]", 'monthNames' : [ "January","February","March","April","May","June","July","August","September","October","November","December" ], 'monthNamesShort' : [ "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" ], 'dayNames' : ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], 'dayNamesShort' : ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], 'today' : "today", 'month' : "month", 'week' : "week", 'day' : "day", 'allday' : "All day", // mod cloud 'download_info' : "Please stand by while your download is being prepared.", // mod register 'email_not_valid' : "Email address not valid", 'email_required' : "Required" };

var updateInterval = 40000; var sse_enabled = 0; var localUser = 3; var zid = 'netnut404@hub.stephenson.cc'; var justifiedGalleryActive = false; var channelId = false; var preloadImages = 0; var auto_save_draft = false; var module = 'linkinfo';

$(document).ready(function() { $("#nav-search-text").search_autocomplete('https://hub.stephenson.cc/acl');});




View Profile
Edit Profile
Channels
Grant Stephenson
NetNut404

Settings

Admin

Logout







<div id="banner" class="navbar-text">Hubzilla</div> <ul id="nav-right" class="navbar-nav"> <li class="nav-item collapse clearfix" id="nav-search"> <form class="form-inline" method="get" action="search" role="search"> <input class="form-control form-control-sm mt-1 me-2" id="nav-search-text" type="text" value="" placeholder="@name, #tag, ?doc, content" name="search" title="Search site @name, !forum, #tag, ?docs, content" onclick="this.submit();" onblur="closeMenu('nav-search'); openMenu('nav-search-btn');"/> </form> <div id="nav-search-spinner" class="spinner-wrapper"> <div class="spinner s"></div> </div> </li> <li class="nav-item" id="nav-search-btn"> <a class="nav-link" href="#nav-search" title="Search site @name, !forum, #tag, ?docs, content" onclick="openMenu('nav-search'); closeMenu('nav-search-btn'); $('#nav-search-text').focus(); return false;"><i class="fa fa-fw fa-search"></i></a> </li> <li id="notifications-btn" class="nav-item d-xl-none"> <a class="nav-link text-white notifications-btn" href="#><i id=notifications-btn-icon" class="fa fa-exclamation-circle notifications-btn-icon"></i></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/cdav/calendar&quot; title="Calendar"> <i class="fa fa-fw fa-calendar"></i><span class="d-lg-none">Calendar</span></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/cdav/addressbook&quot; title="CardDAV"> <i class="fa fa-fw fa-vcard-o"></i><span class="d-lg-none">CardDAV</span></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/hq&quot; title="HQ"> <i class="fa fa-fw fa-user-circle-o"></i><span class="d-lg-none">HQ</span></a> </li> <li class="nav-app-sortable"> </li> <li class="nav-item dropdown" id="app-menu"> <a class="nav-link" href="# data-bs-toggle=offcanvas" data-bs-target="#app-bin" aria-controls="app-bin"><i class="fa fa-fw fa-bars"></i></a> </li> </ul> </div> </div>



Pinned Apps



Calendar




CardDAV




HQ


Featured Apps

Directory

Photos

Search

Webpages

Twitter Crosspost Connector

Files

Affinity Tool

Channel

Channel Export

Channel Sources

Connections

Gallery

OAuth2 Apps Manager

Public Stream

Stream

Apps

var app_bin = document.getElementById('app-bin-container'); new Sortable(app_bin, { animation: 150, delay: 200, delayOnTouchOnly: true, onStart: function (e) { $('#app-bin-trash').removeClass('d-none'); }, onEnd: function (e) { $('#app-bin-trash').addClass('d-none'); let app_str = ''; $('#app-bin-container a:visible').each(function () { if(app_str.length) { app_str = app_str.concat(',', this.text); } else { app_str = app_str.concat(this.text); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_order', 'v' : app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); var nav_app_bin = document.getElementById('nav-right'); new Sortable(nav_app_bin, { animation: 150, delay: 200, delayOnTouchOnly: true, draggable: '.nav-app-sortable', onEnd: function (e) { let nav_app_str = ''; $('#nav-right .nav-app-sortable').each(function () { if(nav_app_str.length) { nav_app_str = nav_app_str.concat(',', $(this).text()); } else { nav_app_str = nav_app_str.concat($(this).text()); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_pin_order', 'v' : nav_app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); var nav_app_bin_container = document.getElementById('nav-app-bin-container'); new Sortable(nav_app_bin_container, { animation: 150, delay: 200, delayOnTouchOnly: true, onEnd: function (e) { let nav_app_str = ''; $('#nav-app-bin-container a').each(function () { if(nav_app_str.length) { nav_app_str = nav_app_str.concat(',', $(this).text()); } else { nav_app_str = nav_app_str.concat($(this).text()); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_pin_order', 'v' : nav_app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); $('#nav-right').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', '0px 0px 3px red inset'); }); $('#nav-right').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); }); $('#nav-right').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_pinned_app', 'papp' : papp } }) .done( function() { $('').insertBefore('#app-menu'); }); }); $('#app-menu').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', '0px 0px 1px red inset'); }); $('#app-menu').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); }); $('#app-menu').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_featured_app', 'papp' : papp } }) .done( function() { $('' + app_name + '').appendTo('#app-bin-container'); }); }); $('#app-bin-trash').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $('#app-bin-container a[href=\'' + app_url + '\']').fadeOut(); }); $('#app-bin-trash').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $('#app-bin-container a[href=\'' + app_url + '\']').fadeIn(); }); $('#app-bin-trash').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_featured_app', 'papp' : papp } }); }); var papp, app_icon, app_url; $(document).on('dragstart', function (e) { papp = e.target.dataset.papp || null; app_icon = e.target.dataset.icon || null; app_url = e.target.dataset.url || null; app_name = e.target.dataset.name || null; });

<main> <div class="content"> <div class="columns"> <aside id="region_1"><div class="aside_spacer_top_left"></div><div class="aside_spacer_left"><div id="left_aside_wrapper" class="aside_wrapper"></div></div></aside> <section id="region_2"><!-- Root element of PhotoSwipe. Must have class pswp. -->

<div id="page-footer"></div> <div id="pause"></div> </section> <aside id="region_3" class="d-none d-xl-block"><div class="aside_spacer_top_right"></div><div class="aside_spacer_right"><div id="right_aside_wrapper" class="aside_wrapper"></div></div></aside> </div> </div></main><footer></footer>
@Kyle Rankin I agree moving is a nice feature in mastodon , but it kinda feels like changing your email address. that's why I like the nomadic identity of Hubzilla #^Hubzilla project



Hubzilla is a powerful platform for creating interconnected websites featuring a
decentralized identity, communications, and permissions framework built using common webserver technology.



var baseurl="https://hub.stephenson.cc";

var aStr = { 'delitem' : "Delete this item?", 'itemdel' : "Item deleted", 'comment' : "Comment", 'showmore' : " show all", 'showfewer' : " show less", 'divgrowmore' : " expand", 'divgrowless' : " collapse", 'pwshort' : "Password too short", 'pwnomatch' : "Passwords do not match", 'everybody' : "everybody", 'passphrase' : "Secret Passphrase", 'passhint' : "Passphrase hint", 'permschange' : "Notice: Permissions have changed but have not yet been submitted.", 'closeAll' : "close all", 'nothingnew' : "Nothing new here", 'rating_desc' : "Rate This Channel (this is public)", 'rating_val' : "Rating", 'rating_text' : "Describe (optional)", 'submit' : "Submit", 'linkurl' : "Please enter a link URL", 'leavethispage' : "Unsaved changes. Are you sure you wish to leave this page?", 'location' : "Location", 'lovely' : "lovely", 'wonderful' : "wonderful", 'fantastic' : "fantastic", 'great' : "great", 'nick_invld1' : "Your chosen nickname was either already taken or not valid. Please use our suggestion (", 'nick_invld2' : ") or enter a new one.", 'nick_valid' : "Thank you, this nickname is valid.", 'name_empty' : "A channel name is required.", 'name_ok1' : "This is a ", 'name_ok2' : " channel name", 'to_reply' : "Back to reply", 'pinned' : "Pinned", 'pin_item' : "Pin to the top", 'unpin_item' : "Unpin from the top", 'plural_func' : "0", 't01' : "", 't02' : "", 't03' : "ago", 't04' : "from now", 't05' : "less than a minute", 't06' : "about a minute", 't07' : "%d minutes", 't08' : "about an hour", 't09' : "about %d hours", 't10' : "a day", 't11' : "%d days", 't12' : "about a month", 't13' : "%d months", 't14' : "about a year", 't15' : "%d years", 't16' : " ", 't17' : "[]", 'monthNames' : [ "January","February","March","April","May","June","July","August","September","October","November","December" ], 'monthNamesShort' : [ "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" ], 'dayNames' : ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], 'dayNamesShort' : ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], 'today' : "today", 'month' : "month", 'week' : "week", 'day' : "day", 'allday' : "All day", // mod cloud 'download_info' : "Please stand by while your download is being prepared.", // mod register 'email_not_valid' : "Email address not valid", 'email_required' : "Required" };

var updateInterval = 40000; var sse_enabled = 0; var localUser = 3; var zid = 'netnut404@hub.stephenson.cc'; var justifiedGalleryActive = false; var channelId = false; var preloadImages = 0; var auto_save_draft = false; var module = 'linkinfo';

$(document).ready(function() { $("#nav-search-text").search_autocomplete('https://hub.stephenson.cc/acl');});




View Profile
Edit Profile
Channels
Grant Stephenson
NetNut404

Settings

Admin

Logout







<div id="banner" class="navbar-text">Hubzilla</div> <ul id="nav-right" class="navbar-nav"> <li class="nav-item collapse clearfix" id="nav-search"> <form class="form-inline" method="get" action="search" role="search"> <input class="form-control form-control-sm mt-1 me-2" id="nav-search-text" type="text" value="" placeholder="@name, #tag, ?doc, content" name="search" title="Search site @name, !forum, #tag, ?docs, content" onclick="this.submit();" onblur="closeMenu('nav-search'); openMenu('nav-search-btn');"/> </form> <div id="nav-search-spinner" class="spinner-wrapper"> <div class="spinner s"></div> </div> </li> <li class="nav-item" id="nav-search-btn"> <a class="nav-link" href="#nav-search" title="Search site @name, !forum, #tag, ?docs, content" onclick="openMenu('nav-search'); closeMenu('nav-search-btn'); $('#nav-search-text').focus(); return false;"><i class="fa fa-fw fa-search"></i></a> </li> <li id="notifications-btn" class="nav-item d-xl-none"> <a class="nav-link text-white notifications-btn" href="#><i id=notifications-btn-icon" class="fa fa-exclamation-circle notifications-btn-icon"></i></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/cdav/calendar&quot; title="Calendar"> <i class="fa fa-fw fa-calendar"></i><span class="d-lg-none">Calendar</span></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/cdav/addressbook&quot; title="CardDAV"> <i class="fa fa-fw fa-vcard-o"></i><span class="d-lg-none">CardDAV</span></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/hq&quot; title="HQ"> <i class="fa fa-fw fa-user-circle-o"></i><span class="d-lg-none">HQ</span></a> </li> <li class="nav-app-sortable"> </li> <li class="nav-item dropdown" id="app-menu"> <a class="nav-link" href="# data-bs-toggle=offcanvas" data-bs-target="#app-bin" aria-controls="app-bin"><i class="fa fa-fw fa-bars"></i></a> </li> </ul> </div> </div>



Pinned Apps



Calendar




CardDAV




HQ


Featured Apps

Directory

Photos

Search

Webpages

Twitter Crosspost Connector

Files

Affinity Tool

Channel

Channel Export

Channel Sources

Connections

Gallery

OAuth2 Apps Manager

Public Stream

Stream

Apps

var app_bin = document.getElementById('app-bin-container'); new Sortable(app_bin, { animation: 150, delay: 200, delayOnTouchOnly: true, onStart: function (e) { $('#app-bin-trash').removeClass('d-none'); }, onEnd: function (e) { $('#app-bin-trash').addClass('d-none'); let app_str = ''; $('#app-bin-container a:visible').each(function () { if(app_str.length) { app_str = app_str.concat(',', this.text); } else { app_str = app_str.concat(this.text); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_order', 'v' : app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); var nav_app_bin = document.getElementById('nav-right'); new Sortable(nav_app_bin, { animation: 150, delay: 200, delayOnTouchOnly: true, draggable: '.nav-app-sortable', onEnd: function (e) { let nav_app_str = ''; $('#nav-right .nav-app-sortable').each(function () { if(nav_app_str.length) { nav_app_str = nav_app_str.concat(',', $(this).text()); } else { nav_app_str = nav_app_str.concat($(this).text()); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_pin_order', 'v' : nav_app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); var nav_app_bin_container = document.getElementById('nav-app-bin-container'); new Sortable(nav_app_bin_container, { animation: 150, delay: 200, delayOnTouchOnly: true, onEnd: function (e) { let nav_app_str = ''; $('#nav-app-bin-container a').each(function () { if(nav_app_str.length) { nav_app_str = nav_app_str.concat(',', $(this).text()); } else { nav_app_str = nav_app_str.concat($(this).text()); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_pin_order', 'v' : nav_app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); $('#nav-right').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', '0px 0px 3px red inset'); }); $('#nav-right').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); }); $('#nav-right').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_pinned_app', 'papp' : papp } }) .done( function() { $('').insertBefore('#app-menu'); }); }); $('#app-menu').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', '0px 0px 1px red inset'); }); $('#app-menu').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); }); $('#app-menu').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_featured_app', 'papp' : papp } }) .done( function() { $('' + app_name + '').appendTo('#app-bin-container'); }); }); $('#app-bin-trash').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $('#app-bin-container a[href=\'' + app_url + '\']').fadeOut(); }); $('#app-bin-trash').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $('#app-bin-container a[href=\'' + app_url + '\']').fadeIn(); }); $('#app-bin-trash').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_featured_app', 'papp' : papp } }); }); var papp, app_icon, app_url; $(document).on('dragstart', function (e) { papp = e.target.dataset.papp || null; app_icon = e.target.dataset.icon || null; app_url = e.target.dataset.url || null; app_name = e.target.dataset.name || null; });

<main> <div class="content"> <div class="columns"> <aside id="region_1"><div class="aside_spacer_top_left"></div><div class="aside_spacer_left"><div id="left_aside_wrapper" class="aside_wrapper"></div></div></aside> <section id="region_2"><!-- Root element of PhotoSwipe. Must have class pswp. -->

<div id="page-footer"></div> <div id="pause"></div> </section> <aside id="region_3" class="d-none d-xl-block"><div class="aside_spacer_top_right"></div><div class="aside_spacer_right"><div id="right_aside_wrapper" class="aside_wrapper"></div></div></aside> </div> </div></main><footer></footer>
@Kyle Rankin I agree moving is a nice feature in mastodon , but it kinda feels like changing your email address. that's why I like the nomadic identity of Hubzilla #^Hubzilla project



Hubzilla is a powerful platform for creating interconnected websites featuring a
decentralized identity, communications, and permissions framework built using common webserver technology.



var baseurl="https://hub.stephenson.cc";

var aStr = { 'delitem' : "Delete this item?", 'itemdel' : "Item deleted", 'comment' : "Comment", 'showmore' : " show all", 'showfewer' : " show less", 'divgrowmore' : " expand", 'divgrowless' : " collapse", 'pwshort' : "Password too short", 'pwnomatch' : "Passwords do not match", 'everybody' : "everybody", 'passphrase' : "Secret Passphrase", 'passhint' : "Passphrase hint", 'permschange' : "Notice: Permissions have changed but have not yet been submitted.", 'closeAll' : "close all", 'nothingnew' : "Nothing new here", 'rating_desc' : "Rate This Channel (this is public)", 'rating_val' : "Rating", 'rating_text' : "Describe (optional)", 'submit' : "Submit", 'linkurl' : "Please enter a link URL", 'leavethispage' : "Unsaved changes. Are you sure you wish to leave this page?", 'location' : "Location", 'lovely' : "lovely", 'wonderful' : "wonderful", 'fantastic' : "fantastic", 'great' : "great", 'nick_invld1' : "Your chosen nickname was either already taken or not valid. Please use our suggestion (", 'nick_invld2' : ") or enter a new one.", 'nick_valid' : "Thank you, this nickname is valid.", 'name_empty' : "A channel name is required.", 'name_ok1' : "This is a ", 'name_ok2' : " channel name", 'to_reply' : "Back to reply", 'pinned' : "Pinned", 'pin_item' : "Pin to the top", 'unpin_item' : "Unpin from the top", 'plural_func' : "0", 't01' : "", 't02' : "", 't03' : "ago", 't04' : "from now", 't05' : "less than a minute", 't06' : "about a minute", 't07' : "%d minutes", 't08' : "about an hour", 't09' : "about %d hours", 't10' : "a day", 't11' : "%d days", 't12' : "about a month", 't13' : "%d months", 't14' : "about a year", 't15' : "%d years", 't16' : " ", 't17' : "[]", 'monthNames' : [ "January","February","March","April","May","June","July","August","September","October","November","December" ], 'monthNamesShort' : [ "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" ], 'dayNames' : ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], 'dayNamesShort' : ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], 'today' : "today", 'month' : "month", 'week' : "week", 'day' : "day", 'allday' : "All day", // mod cloud 'download_info' : "Please stand by while your download is being prepared.", // mod register 'email_not_valid' : "Email address not valid", 'email_required' : "Required" };

var updateInterval = 40000; var sse_enabled = 0; var localUser = 3; var zid = 'netnut404@hub.stephenson.cc'; var justifiedGalleryActive = false; var channelId = false; var preloadImages = 0; var auto_save_draft = false; var module = 'linkinfo';

$(document).ready(function() { $("#nav-search-text").search_autocomplete('https://hub.stephenson.cc/acl');});




View Profile
Edit Profile
Channels
Grant Stephenson
NetNut404

Settings

Admin

Logout







<div id="banner" class="navbar-text">Hubzilla</div> <ul id="nav-right" class="navbar-nav"> <li class="nav-item collapse clearfix" id="nav-search"> <form class="form-inline" method="get" action="search" role="search"> <input class="form-control form-control-sm mt-1 me-2" id="nav-search-text" type="text" value="" placeholder="@name, #tag, ?doc, content" name="search" title="Search site @name, !forum, #tag, ?docs, content" onclick="this.submit();" onblur="closeMenu('nav-search'); openMenu('nav-search-btn');"/> </form> <div id="nav-search-spinner" class="spinner-wrapper"> <div class="spinner s"></div> </div> </li> <li class="nav-item" id="nav-search-btn"> <a class="nav-link" href="#nav-search" title="Search site @name, !forum, #tag, ?docs, content" onclick="openMenu('nav-search'); closeMenu('nav-search-btn'); $('#nav-search-text').focus(); return false;"><i class="fa fa-fw fa-search"></i></a> </li> <li id="notifications-btn" class="nav-item d-xl-none"> <a class="nav-link text-white notifications-btn" href="#><i id=notifications-btn-icon" class="fa fa-exclamation-circle notifications-btn-icon"></i></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/cdav/calendar&quot; title="Calendar"> <i class="fa fa-fw fa-calendar"></i><span class="d-lg-none">Calendar</span></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/cdav/addressbook&quot; title="CardDAV"> <i class="fa fa-fw fa-vcard-o"></i><span class="d-lg-none">CardDAV</span></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/hq&quot; title="HQ"> <i class="fa fa-fw fa-user-circle-o"></i><span class="d-lg-none">HQ</span></a> </li> <li class="nav-app-sortable"> </li> <li class="nav-item dropdown" id="app-menu"> <a class="nav-link" href="# data-bs-toggle=offcanvas" data-bs-target="#app-bin" aria-controls="app-bin"><i class="fa fa-fw fa-bars"></i></a> </li> </ul> </div> </div>



Pinned Apps



Calendar




CardDAV




HQ


Featured Apps

Directory

Photos

Search

Webpages

Twitter Crosspost Connector

Files

Affinity Tool

Channel

Channel Export

Channel Sources

Connections

Gallery

OAuth2 Apps Manager

Public Stream

Stream

Apps

var app_bin = document.getElementById('app-bin-container'); new Sortable(app_bin, { animation: 150, delay: 200, delayOnTouchOnly: true, onStart: function (e) { $('#app-bin-trash').removeClass('d-none'); }, onEnd: function (e) { $('#app-bin-trash').addClass('d-none'); let app_str = ''; $('#app-bin-container a:visible').each(function () { if(app_str.length) { app_str = app_str.concat(',', this.text); } else { app_str = app_str.concat(this.text); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_order', 'v' : app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); var nav_app_bin = document.getElementById('nav-right'); new Sortable(nav_app_bin, { animation: 150, delay: 200, delayOnTouchOnly: true, draggable: '.nav-app-sortable', onEnd: function (e) { let nav_app_str = ''; $('#nav-right .nav-app-sortable').each(function () { if(nav_app_str.length) { nav_app_str = nav_app_str.concat(',', $(this).text()); } else { nav_app_str = nav_app_str.concat($(this).text()); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_pin_order', 'v' : nav_app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); var nav_app_bin_container = document.getElementById('nav-app-bin-container'); new Sortable(nav_app_bin_container, { animation: 150, delay: 200, delayOnTouchOnly: true, onEnd: function (e) { let nav_app_str = ''; $('#nav-app-bin-container a').each(function () { if(nav_app_str.length) { nav_app_str = nav_app_str.concat(',', $(this).text()); } else { nav_app_str = nav_app_str.concat($(this).text()); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_pin_order', 'v' : nav_app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); $('#nav-right').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', '0px 0px 3px red inset'); }); $('#nav-right').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); }); $('#nav-right').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_pinned_app', 'papp' : papp } }) .done( function() { $('').insertBefore('#app-menu'); }); }); $('#app-menu').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', '0px 0px 1px red inset'); }); $('#app-menu').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); }); $('#app-menu').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_featured_app', 'papp' : papp } }) .done( function() { $('' + app_name + '').appendTo('#app-bin-container'); }); }); $('#app-bin-trash').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $('#app-bin-container a[href=\'' + app_url + '\']').fadeOut(); }); $('#app-bin-trash').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $('#app-bin-container a[href=\'' + app_url + '\']').fadeIn(); }); $('#app-bin-trash').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_featured_app', 'papp' : papp } }); }); var papp, app_icon, app_url; $(document).on('dragstart', function (e) { papp = e.target.dataset.papp || null; app_icon = e.target.dataset.icon || null; app_url = e.target.dataset.url || null; app_name = e.target.dataset.name || null; });

<main> <div class="content"> <div class="columns"> <aside id="region_1"><div class="aside_spacer_top_left"></div><div class="aside_spacer_left"><div id="left_aside_wrapper" class="aside_wrapper"></div></div></aside> <section id="region_2"><!-- Root element of PhotoSwipe. Must have class pswp. -->

<div id="page-footer"></div> <div id="pause"></div> </section> <aside id="region_3" class="d-none d-xl-block"><div class="aside_spacer_top_right"></div><div class="aside_spacer_right"><div id="right_aside_wrapper" class="aside_wrapper"></div></div></aside> </div> </div></main><footer></footer>
@Kyle Rankin I agree moving is a nice feature in mastodon , but it kinda feels like changing your email address. that's why I like the nomadic identity of Hubzilla #^Hubzilla project



Hubzilla is a powerful platform for creating interconnected websites featuring a
decentralized identity, communications, and permissions framework built using common webserver technology.



var baseurl="https://hub.stephenson.cc";

var aStr = { 'delitem' : "Delete this item?", 'itemdel' : "Item deleted", 'comment' : "Comment", 'showmore' : " show all", 'showfewer' : " show less", 'divgrowmore' : " expand", 'divgrowless' : " collapse", 'pwshort' : "Password too short", 'pwnomatch' : "Passwords do not match", 'everybody' : "everybody", 'passphrase' : "Secret Passphrase", 'passhint' : "Passphrase hint", 'permschange' : "Notice: Permissions have changed but have not yet been submitted.", 'closeAll' : "close all", 'nothingnew' : "Nothing new here", 'rating_desc' : "Rate This Channel (this is public)", 'rating_val' : "Rating", 'rating_text' : "Describe (optional)", 'submit' : "Submit", 'linkurl' : "Please enter a link URL", 'leavethispage' : "Unsaved changes. Are you sure you wish to leave this page?", 'location' : "Location", 'lovely' : "lovely", 'wonderful' : "wonderful", 'fantastic' : "fantastic", 'great' : "great", 'nick_invld1' : "Your chosen nickname was either already taken or not valid. Please use our suggestion (", 'nick_invld2' : ") or enter a new one.", 'nick_valid' : "Thank you, this nickname is valid.", 'name_empty' : "A channel name is required.", 'name_ok1' : "This is a ", 'name_ok2' : " channel name", 'to_reply' : "Back to reply", 'pinned' : "Pinned", 'pin_item' : "Pin to the top", 'unpin_item' : "Unpin from the top", 'plural_func' : "0", 't01' : "", 't02' : "", 't03' : "ago", 't04' : "from now", 't05' : "less than a minute", 't06' : "about a minute", 't07' : "%d minutes", 't08' : "about an hour", 't09' : "about %d hours", 't10' : "a day", 't11' : "%d days", 't12' : "about a month", 't13' : "%d months", 't14' : "about a year", 't15' : "%d years", 't16' : " ", 't17' : "[]", 'monthNames' : [ "January","February","March","April","May","June","July","August","September","October","November","December" ], 'monthNamesShort' : [ "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" ], 'dayNames' : ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], 'dayNamesShort' : ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], 'today' : "today", 'month' : "month", 'week' : "week", 'day' : "day", 'allday' : "All day", // mod cloud 'download_info' : "Please stand by while your download is being prepared.", // mod register 'email_not_valid' : "Email address not valid", 'email_required' : "Required" };

var updateInterval = 40000; var sse_enabled = 0; var localUser = 3; var zid = 'netnut404@hub.stephenson.cc'; var justifiedGalleryActive = false; var channelId = false; var preloadImages = 0; var auto_save_draft = false; var module = 'linkinfo';

$(document).ready(function() { $("#nav-search-text").search_autocomplete('https://hub.stephenson.cc/acl');});




View Profile
Edit Profile
Channels
Grant Stephenson
NetNut404

Settings

Admin

Logout







<div id="banner" class="navbar-text">Hubzilla</div> <ul id="nav-right" class="navbar-nav"> <li class="nav-item collapse clearfix" id="nav-search"> <form class="form-inline" method="get" action="search" role="search"> <input class="form-control form-control-sm mt-1 me-2" id="nav-search-text" type="text" value="" placeholder="@name, #tag, ?doc, content" name="search" title="Search site @name, !forum, #tag, ?docs, content" onclick="this.submit();" onblur="closeMenu('nav-search'); openMenu('nav-search-btn');"/> </form> <div id="nav-search-spinner" class="spinner-wrapper"> <div class="spinner s"></div> </div> </li> <li class="nav-item" id="nav-search-btn"> <a class="nav-link" href="#nav-search" title="Search site @name, !forum, #tag, ?docs, content" onclick="openMenu('nav-search'); closeMenu('nav-search-btn'); $('#nav-search-text').focus(); return false;"><i class="fa fa-fw fa-search"></i></a> </li> <li id="notifications-btn" class="nav-item d-xl-none"> <a class="nav-link text-white notifications-btn" href="#><i id=notifications-btn-icon" class="fa fa-exclamation-circle notifications-btn-icon"></i></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/cdav/calendar&quot; title="Calendar"> <i class="fa fa-fw fa-calendar"></i><span class="d-lg-none">Calendar</span></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/cdav/addressbook&quot; title="CardDAV"> <i class="fa fa-fw fa-vcard-o"></i><span class="d-lg-none">CardDAV</span></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/hq&quot; title="HQ"> <i class="fa fa-fw fa-user-circle-o"></i><span class="d-lg-none">HQ</span></a> </li> <li class="nav-app-sortable"> </li> <li class="nav-item dropdown" id="app-menu"> <a class="nav-link" href="# data-bs-toggle=offcanvas" data-bs-target="#app-bin" aria-controls="app-bin"><i class="fa fa-fw fa-bars"></i></a> </li> </ul> </div> </div>



Pinned Apps



Calendar




CardDAV




HQ


Featured Apps

Directory

Photos

Search

Webpages

Twitter Crosspost Connector

Files

Affinity Tool

Channel

Channel Export

Channel Sources

Connections

Gallery

OAuth2 Apps Manager

Public Stream

Stream

Apps

var app_bin = document.getElementById('app-bin-container'); new Sortable(app_bin, { animation: 150, delay: 200, delayOnTouchOnly: true, onStart: function (e) { $('#app-bin-trash').removeClass('d-none'); }, onEnd: function (e) { $('#app-bin-trash').addClass('d-none'); let app_str = ''; $('#app-bin-container a:visible').each(function () { if(app_str.length) { app_str = app_str.concat(',', this.text); } else { app_str = app_str.concat(this.text); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_order', 'v' : app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); var nav_app_bin = document.getElementById('nav-right'); new Sortable(nav_app_bin, { animation: 150, delay: 200, delayOnTouchOnly: true, draggable: '.nav-app-sortable', onEnd: function (e) { let nav_app_str = ''; $('#nav-right .nav-app-sortable').each(function () { if(nav_app_str.length) { nav_app_str = nav_app_str.concat(',', $(this).text()); } else { nav_app_str = nav_app_str.concat($(this).text()); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_pin_order', 'v' : nav_app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); var nav_app_bin_container = document.getElementById('nav-app-bin-container'); new Sortable(nav_app_bin_container, { animation: 150, delay: 200, delayOnTouchOnly: true, onEnd: function (e) { let nav_app_str = ''; $('#nav-app-bin-container a').each(function () { if(nav_app_str.length) { nav_app_str = nav_app_str.concat(',', $(this).text()); } else { nav_app_str = nav_app_str.concat($(this).text()); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_pin_order', 'v' : nav_app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); $('#nav-right').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', '0px 0px 3px red inset'); }); $('#nav-right').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); }); $('#nav-right').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_pinned_app', 'papp' : papp } }) .done( function() { $('').insertBefore('#app-menu'); }); }); $('#app-menu').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', '0px 0px 1px red inset'); }); $('#app-menu').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); }); $('#app-menu').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_featured_app', 'papp' : papp } }) .done( function() { $('' + app_name + '').appendTo('#app-bin-container'); }); }); $('#app-bin-trash').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $('#app-bin-container a[href=\'' + app_url + '\']').fadeOut(); }); $('#app-bin-trash').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $('#app-bin-container a[href=\'' + app_url + '\']').fadeIn(); }); $('#app-bin-trash').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_featured_app', 'papp' : papp } }); }); var papp, app_icon, app_url; $(document).on('dragstart', function (e) { papp = e.target.dataset.papp || null; app_icon = e.target.dataset.icon || null; app_url = e.target.dataset.url || null; app_name = e.target.dataset.name || null; });

<main> <div class="content"> <div class="columns"> <aside id="region_1"><div class="aside_spacer_top_left"></div><div class="aside_spacer_left"><div id="left_aside_wrapper" class="aside_wrapper"></div></div></aside> <section id="region_2"><!-- Root element of PhotoSwipe. Must have class pswp. -->

<div id="page-footer"></div> <div id="pause"></div> </section> <aside id="region_3" class="d-none d-xl-block"><div class="aside_spacer_top_right"></div><div class="aside_spacer_right"><div id="right_aside_wrapper" class="aside_wrapper"></div></div></aside> </div> </div></main><footer></footer>
@Kyle Rankin I agree moving is a nice feature in mastodon , but it kinda feels like changing your email address. that's why I like the nomadic identity of Hubzilla #^Hubzilla project



Hubzilla is a powerful platform for creating interconnected websites featuring a
decentralized identity, communications, and permissions framework built using common webserver technology.



var baseurl="https://hub.stephenson.cc";

var aStr = { 'delitem' : "Delete this item?", 'itemdel' : "Item deleted", 'comment' : "Comment", 'showmore' : " show all", 'showfewer' : " show less", 'divgrowmore' : " expand", 'divgrowless' : " collapse", 'pwshort' : "Password too short", 'pwnomatch' : "Passwords do not match", 'everybody' : "everybody", 'passphrase' : "Secret Passphrase", 'passhint' : "Passphrase hint", 'permschange' : "Notice: Permissions have changed but have not yet been submitted.", 'closeAll' : "close all", 'nothingnew' : "Nothing new here", 'rating_desc' : "Rate This Channel (this is public)", 'rating_val' : "Rating", 'rating_text' : "Describe (optional)", 'submit' : "Submit", 'linkurl' : "Please enter a link URL", 'leavethispage' : "Unsaved changes. Are you sure you wish to leave this page?", 'location' : "Location", 'lovely' : "lovely", 'wonderful' : "wonderful", 'fantastic' : "fantastic", 'great' : "great", 'nick_invld1' : "Your chosen nickname was either already taken or not valid. Please use our suggestion (", 'nick_invld2' : ") or enter a new one.", 'nick_valid' : "Thank you, this nickname is valid.", 'name_empty' : "A channel name is required.", 'name_ok1' : "This is a ", 'name_ok2' : " channel name", 'to_reply' : "Back to reply", 'pinned' : "Pinned", 'pin_item' : "Pin to the top", 'unpin_item' : "Unpin from the top", 'plural_func' : "0", 't01' : "", 't02' : "", 't03' : "ago", 't04' : "from now", 't05' : "less than a minute", 't06' : "about a minute", 't07' : "%d minutes", 't08' : "about an hour", 't09' : "about %d hours", 't10' : "a day", 't11' : "%d days", 't12' : "about a month", 't13' : "%d months", 't14' : "about a year", 't15' : "%d years", 't16' : " ", 't17' : "[]", 'monthNames' : [ "January","February","March","April","May","June","July","August","September","October","November","December" ], 'monthNamesShort' : [ "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" ], 'dayNames' : ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], 'dayNamesShort' : ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], 'today' : "today", 'month' : "month", 'week' : "week", 'day' : "day", 'allday' : "All day", // mod cloud 'download_info' : "Please stand by while your download is being prepared.", // mod register 'email_not_valid' : "Email address not valid", 'email_required' : "Required" };

var updateInterval = 40000; var sse_enabled = 0; var localUser = 3; var zid = 'netnut404@hub.stephenson.cc'; var justifiedGalleryActive = false; var channelId = false; var preloadImages = 0; var auto_save_draft = false; var module = 'linkinfo';

$(document).ready(function() { $("#nav-search-text").search_autocomplete('https://hub.stephenson.cc/acl');});




View Profile
Edit Profile
Channels
Grant Stephenson
NetNut404

Settings

Admin

Logout







<div id="banner" class="navbar-text">Hubzilla</div> <ul id="nav-right" class="navbar-nav"> <li class="nav-item collapse clearfix" id="nav-search"> <form class="form-inline" method="get" action="search" role="search"> <input class="form-control form-control-sm mt-1 me-2" id="nav-search-text" type="text" value="" placeholder="@name, #tag, ?doc, content" name="search" title="Search site @name, !forum, #tag, ?docs, content" onclick="this.submit();" onblur="closeMenu('nav-search'); openMenu('nav-search-btn');"/> </form> <div id="nav-search-spinner" class="spinner-wrapper"> <div class="spinner s"></div> </div> </li> <li class="nav-item" id="nav-search-btn"> <a class="nav-link" href="#nav-search" title="Search site @name, !forum, #tag, ?docs, content" onclick="openMenu('nav-search'); closeMenu('nav-search-btn'); $('#nav-search-text').focus(); return false;"><i class="fa fa-fw fa-search"></i></a> </li> <li id="notifications-btn" class="nav-item d-xl-none"> <a class="nav-link text-white notifications-btn" href="#><i id=notifications-btn-icon" class="fa fa-exclamation-circle notifications-btn-icon"></i></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/cdav/calendar&quot; title="Calendar"> <i class="fa fa-fw fa-calendar"></i><span class="d-lg-none">Calendar</span></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/cdav/addressbook&quot; title="CardDAV"> <i class="fa fa-fw fa-vcard-o"></i><span class="d-lg-none">CardDAV</span></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/hq&quot; title="HQ"> <i class="fa fa-fw fa-user-circle-o"></i><span class="d-lg-none">HQ</span></a> </li> <li class="nav-app-sortable"> </li> <li class="nav-item dropdown" id="app-menu"> <a class="nav-link" href="# data-bs-toggle=offcanvas" data-bs-target="#app-bin" aria-controls="app-bin"><i class="fa fa-fw fa-bars"></i></a> </li> </ul> </div> </div>



Pinned Apps



Calendar




CardDAV




HQ


Featured Apps

Directory

Photos

Search

Webpages

Twitter Crosspost Connector

Files

Affinity Tool

Channel

Channel Export

Channel Sources

Connections

Gallery

OAuth2 Apps Manager

Public Stream

Stream

Apps

var app_bin = document.getElementById('app-bin-container'); new Sortable(app_bin, { animation: 150, delay: 200, delayOnTouchOnly: true, onStart: function (e) { $('#app-bin-trash').removeClass('d-none'); }, onEnd: function (e) { $('#app-bin-trash').addClass('d-none'); let app_str = ''; $('#app-bin-container a:visible').each(function () { if(app_str.length) { app_str = app_str.concat(',', this.text); } else { app_str = app_str.concat(this.text); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_order', 'v' : app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); var nav_app_bin = document.getElementById('nav-right'); new Sortable(nav_app_bin, { animation: 150, delay: 200, delayOnTouchOnly: true, draggable: '.nav-app-sortable', onEnd: function (e) { let nav_app_str = ''; $('#nav-right .nav-app-sortable').each(function () { if(nav_app_str.length) { nav_app_str = nav_app_str.concat(',', $(this).text()); } else { nav_app_str = nav_app_str.concat($(this).text()); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_pin_order', 'v' : nav_app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); var nav_app_bin_container = document.getElementById('nav-app-bin-container'); new Sortable(nav_app_bin_container, { animation: 150, delay: 200, delayOnTouchOnly: true, onEnd: function (e) { let nav_app_str = ''; $('#nav-app-bin-container a').each(function () { if(nav_app_str.length) { nav_app_str = nav_app_str.concat(',', $(this).text()); } else { nav_app_str = nav_app_str.concat($(this).text()); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_pin_order', 'v' : nav_app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); $('#nav-right').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', '0px 0px 3px red inset'); }); $('#nav-right').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); }); $('#nav-right').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_pinned_app', 'papp' : papp } }) .done( function() { $('').insertBefore('#app-menu'); }); }); $('#app-menu').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', '0px 0px 1px red inset'); }); $('#app-menu').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); }); $('#app-menu').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_featured_app', 'papp' : papp } }) .done( function() { $('' + app_name + '').appendTo('#app-bin-container'); }); }); $('#app-bin-trash').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $('#app-bin-container a[href=\'' + app_url + '\']').fadeOut(); }); $('#app-bin-trash').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $('#app-bin-container a[href=\'' + app_url + '\']').fadeIn(); }); $('#app-bin-trash').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_featured_app', 'papp' : papp } }); }); var papp, app_icon, app_url; $(document).on('dragstart', function (e) { papp = e.target.dataset.papp || null; app_icon = e.target.dataset.icon || null; app_url = e.target.dataset.url || null; app_name = e.target.dataset.name || null; });

<main> <div class="content"> <div class="columns"> <aside id="region_1"><div class="aside_spacer_top_left"></div><div class="aside_spacer_left"><div id="left_aside_wrapper" class="aside_wrapper"></div></div></aside> <section id="region_2"><!-- Root element of PhotoSwipe. Must have class pswp. -->

<div id="page-footer"></div> <div id="pause"></div> </section> <aside id="region_3" class="d-none d-xl-block"><div class="aside_spacer_top_right"></div><div class="aside_spacer_right"><div id="right_aside_wrapper" class="aside_wrapper"></div></div></aside> </div> </div></main><footer></footer>
@Kyle Rankin I agree moving is a nice feature in mastodon , but it kinda feels like changing your email address. that's why I like the nomadic identity of Hubzilla #^Hubzilla project



Hubzilla is a powerful platform for creating interconnected websites featuring a
decentralized identity, communications, and permissions framework built using common webserver technology.



var baseurl="https://hub.stephenson.cc";

var aStr = { 'delitem' : "Delete this item?", 'itemdel' : "Item deleted", 'comment' : "Comment", 'showmore' : " show all", 'showfewer' : " show less", 'divgrowmore' : " expand", 'divgrowless' : " collapse", 'pwshort' : "Password too short", 'pwnomatch' : "Passwords do not match", 'everybody' : "everybody", 'passphrase' : "Secret Passphrase", 'passhint' : "Passphrase hint", 'permschange' : "Notice: Permissions have changed but have not yet been submitted.", 'closeAll' : "close all", 'nothingnew' : "Nothing new here", 'rating_desc' : "Rate This Channel (this is public)", 'rating_val' : "Rating", 'rating_text' : "Describe (optional)", 'submit' : "Submit", 'linkurl' : "Please enter a link URL", 'leavethispage' : "Unsaved changes. Are you sure you wish to leave this page?", 'location' : "Location", 'lovely' : "lovely", 'wonderful' : "wonderful", 'fantastic' : "fantastic", 'great' : "great", 'nick_invld1' : "Your chosen nickname was either already taken or not valid. Please use our suggestion (", 'nick_invld2' : ") or enter a new one.", 'nick_valid' : "Thank you, this nickname is valid.", 'name_empty' : "A channel name is required.", 'name_ok1' : "This is a ", 'name_ok2' : " channel name", 'to_reply' : "Back to reply", 'pinned' : "Pinned", 'pin_item' : "Pin to the top", 'unpin_item' : "Unpin from the top", 'plural_func' : "0", 't01' : "", 't02' : "", 't03' : "ago", 't04' : "from now", 't05' : "less than a minute", 't06' : "about a minute", 't07' : "%d minutes", 't08' : "about an hour", 't09' : "about %d hours", 't10' : "a day", 't11' : "%d days", 't12' : "about a month", 't13' : "%d months", 't14' : "about a year", 't15' : "%d years", 't16' : " ", 't17' : "[]", 'monthNames' : [ "January","February","March","April","May","June","July","August","September","October","November","December" ], 'monthNamesShort' : [ "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" ], 'dayNames' : ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], 'dayNamesShort' : ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], 'today' : "today", 'month' : "month", 'week' : "week", 'day' : "day", 'allday' : "All day", // mod cloud 'download_info' : "Please stand by while your download is being prepared.", // mod register 'email_not_valid' : "Email address not valid", 'email_required' : "Required" };

var updateInterval = 40000; var sse_enabled = 0; var localUser = 3; var zid = 'netnut404@hub.stephenson.cc'; var justifiedGalleryActive = false; var channelId = false; var preloadImages = 0; var auto_save_draft = false; var module = 'linkinfo';

$(document).ready(function() { $("#nav-search-text").search_autocomplete('https://hub.stephenson.cc/acl');});




View Profile
Edit Profile
Channels
Grant Stephenson
NetNut404

Settings

Admin

Logout







<div id="banner" class="navbar-text">Hubzilla</div> <ul id="nav-right" class="navbar-nav"> <li class="nav-item collapse clearfix" id="nav-search"> <form class="form-inline" method="get" action="search" role="search"> <input class="form-control form-control-sm mt-1 me-2" id="nav-search-text" type="text" value="" placeholder="@name, #tag, ?doc, content" name="search" title="Search site @name, !forum, #tag, ?docs, content" onclick="this.submit();" onblur="closeMenu('nav-search'); openMenu('nav-search-btn');"/> </form> <div id="nav-search-spinner" class="spinner-wrapper"> <div class="spinner s"></div> </div> </li> <li class="nav-item" id="nav-search-btn"> <a class="nav-link" href="#nav-search" title="Search site @name, !forum, #tag, ?docs, content" onclick="openMenu('nav-search'); closeMenu('nav-search-btn'); $('#nav-search-text').focus(); return false;"><i class="fa fa-fw fa-search"></i></a> </li> <li id="notifications-btn" class="nav-item d-xl-none"> <a class="nav-link text-white notifications-btn" href="#><i id=notifications-btn-icon" class="fa fa-exclamation-circle notifications-btn-icon"></i></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/cdav/calendar&quot; title="Calendar"> <i class="fa fa-fw fa-calendar"></i><span class="d-lg-none">Calendar</span></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/cdav/addressbook&quot; title="CardDAV"> <i class="fa fa-fw fa-vcard-o"></i><span class="d-lg-none">CardDAV</span></a> </li> <li class="nav-app-sortable"> <a class="navbar-app nav-link" href="https://hub.stephenson.cc/hq&quot; title="HQ"> <i class="fa fa-fw fa-user-circle-o"></i><span class="d-lg-none">HQ</span></a> </li> <li class="nav-app-sortable"> </li> <li class="nav-item dropdown" id="app-menu"> <a class="nav-link" href="# data-bs-toggle=offcanvas" data-bs-target="#app-bin" aria-controls="app-bin"><i class="fa fa-fw fa-bars"></i></a> </li> </ul> </div> </div>



Pinned Apps



Calendar




CardDAV




HQ


Featured Apps

Directory

Photos

Search

Webpages

Twitter Crosspost Connector

Files

Affinity Tool

Channel

Channel Export

Channel Sources

Connections

Gallery

OAuth2 Apps Manager

Public Stream

Stream

Apps

var app_bin = document.getElementById('app-bin-container'); new Sortable(app_bin, { animation: 150, delay: 200, delayOnTouchOnly: true, onStart: function (e) { $('#app-bin-trash').removeClass('d-none'); }, onEnd: function (e) { $('#app-bin-trash').addClass('d-none'); let app_str = ''; $('#app-bin-container a:visible').each(function () { if(app_str.length) { app_str = app_str.concat(',', this.text); } else { app_str = app_str.concat(this.text); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_order', 'v' : app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); var nav_app_bin = document.getElementById('nav-right'); new Sortable(nav_app_bin, { animation: 150, delay: 200, delayOnTouchOnly: true, draggable: '.nav-app-sortable', onEnd: function (e) { let nav_app_str = ''; $('#nav-right .nav-app-sortable').each(function () { if(nav_app_str.length) { nav_app_str = nav_app_str.concat(',', $(this).text()); } else { nav_app_str = nav_app_str.concat($(this).text()); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_pin_order', 'v' : nav_app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); var nav_app_bin_container = document.getElementById('nav-app-bin-container'); new Sortable(nav_app_bin_container, { animation: 150, delay: 200, delayOnTouchOnly: true, onEnd: function (e) { let nav_app_str = ''; $('#nav-app-bin-container a').each(function () { if(nav_app_str.length) { nav_app_str = nav_app_str.concat(',', $(this).text()); } else { nav_app_str = nav_app_str.concat($(this).text()); } }); $.post( 'pconfig', { 'aj' : 1, 'cat' : 'system', 'k' : 'app_pin_order', 'v' : nav_app_str, 'form_security_token' : $('#app-bin-container').data('token') } ); } }); $('#nav-right').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', '0px 0px 3px red inset'); }); $('#nav-right').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); }); $('#nav-right').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_pinned_app', 'papp' : papp } }) .done( function() { $('').insertBefore('#app-menu'); }); }); $('#app-menu').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', '0px 0px 1px red inset'); }); $('#app-menu').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); }); $('#app-menu').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); $(this).css('box-shadow', ''); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_featured_app', 'papp' : papp } }) .done( function() { $('' + app_name + '').appendTo('#app-bin-container'); }); }); $('#app-bin-trash').on('dragover', function (e) { e.preventDefault(); e.stopPropagation(); $('#app-bin-container a[href=\'' + app_url + '\']').fadeOut(); }); $('#app-bin-trash').on('dragleave', function (e) { e.preventDefault(); e.stopPropagation(); $('#app-bin-container a[href=\'' + app_url + '\']').fadeIn(); }); $('#app-bin-trash').on('drop', function (e) { e.preventDefault(); e.stopPropagation(); if (papp === null) return; $.ajax({ type: 'post', url: 'appman', data: { 'aj' : 1, 'feature' : 'nav_featured_app', 'papp' : papp } }); }); var papp, app_icon, app_url; $(document).on('dragstart', function (e) { papp = e.target.dataset.papp || null; app_icon = e.target.dataset.icon || null; app_url = e.target.dataset.url || null; app_name = e.target.dataset.name || null; });

<main> <div class="content"> <div class="columns"> <aside id="region_1"><div class="aside_spacer_top_left"></div><div class="aside_spacer_left"><div id="left_aside_wrapper" class="aside_wrapper"></div></div></aside> <section id="region_2"><!-- Root element of PhotoSwipe. Must have class pswp. -->

<div id="page-footer"></div> <div id="pause"></div> </section> <aside id="region_3" class="d-none d-xl-block"><div class="aside_spacer_top_right"></div><div class="aside_spacer_right"><div id="right_aside_wrapper" class="aside_wrapper"></div></div></aside> </div> </div></main><footer></footer>
@Kyle Rankin I agree tat moving is a nice feature in mastodon , but it kinda feels like changing your email address. that's why I like the nomadic identity of hubzilla.. not that I don't have other accounts.. it's just nice to take your identity with you and not have to tell people your new address

@kyle Gonna need to see this data correlated with people actually living in big cities vs. small towns 🤔

@robchahin And people who lived in big cities pre-pandemic who then moved to small towns or homesteads.

Sign in to participate in the conversation
Librem Social

Librem Social is an opt-in public network. Messages are shared under Creative Commons BY-SA 4.0 license terms. Policy.

Stay safe. Please abide by our code of conduct.

(Source code)

image/svg+xml Librem Chat image/svg+xml