Skip to content

What's your go to product for site stats?

Let's Build It
  • @DownPW As discussed in PM, it appears that this section was actaully missing

    548224ef-b091-44dc-af95-c0b39aac8fcd-image.png

    Have run this on your instance, and all working 🙂

  • Gdpr has been hitting my blog, with the majority of web traffic coming from the EU. I learn that Gdpr has the power to turn your page into a visitor in an error form like 403, 503 type. I was wondering, but after a long chat with Yandex, I realized it was Gdpr that we need to change how we operate in collecting data.

  • @Sala If you are receiving visitors from the EU then you need to comply with the GDPR. If you haven’t already, then you should have robust policies in place that reference privacy, cookies, etc, and the ability for users to make subject access requests etc.

    I can provide more detail if you need it.

  • @phenomlab After complying with EU rules, the site speed improved lol

    alt text

  • @Sala said in What's your go to product for site stats?:

    After complying with EU rules

    What did you use for compliance? There are many guidelines, but some are woefully inadequate and in fact, completely wrong.

  • @phenomlab I should have shared the backstory before obtaining the proper settings. Yes, a lot of plugins make the claim that they will make your site comply with GDPR, but many don’t. I had to backup my database in order for me to acquire the right one, and then I tried testing a few plugins. This “GDPR Complianz” is what I landed on, and it does everything. Because it is automatic, you, as the administrator, don’t have to do any effort. It creates all cookies in the background during installation and whenever new ones arise, blocking them until the user consent.

  • @Sala good choice. That’s easily the best plugin there is for GDPR compliance under WordPress.

  • Plenty of good options there, making me edge ever closer to starting up that forum again 🤣.

  • @JAC You know you want to… I challenge you to resist!

  • For anyone else coming here and is struggling to get pm2 to work with Umami (as I did - it started, but never seemed to work after a reboot which is pretty useless), you can use the below. Obviously, change the parts noted inside the [brackets]. Follow the below instructions:

    Instructions

    Open a terminal and create a new systemd service file:

    sudo nano /etc/systemd/system/umami.service
    

    Add the following content to the file:

    [Unit]
    Description=Umami Analytics Server
    After=network.target
    
    [Service]
    Type=simple
    User=[umami user]
    WorkingDirectory=[path to umami]
    ExecStart=/usr/local/bin/node [path to umami]/node_modules/.bin/next start
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    

    Replace [umami user] with the username of the user that should run the Umami service, and [path to umami] with the actual path to your Umami installation.

    Save the file and exit the editor.

    Reload the systemd manager configuration:

    sudo systemctl daemon-reload
    

    Enable the Umami service to start on boot:

    sudo systemctl enable umami.service
    

    Start the Umami service:

    sudo systemctl start umami.service
    

    You can check the status of the service with:

    sudo systemctl status umami.service
    

    This systemd service file will ensure that Umami starts automatically when the system boots, and it will restart the service if it fails. Remember to adjust the WorkingDirectory and ExecStart paths according to where Umami is installed on your system, and ensure that Node.js is installed and accessible at /usr/bin/node (or adjust the path to Node.js as necessary).


  • 5 Votes
    3 Posts
    132 Views

    Very good like always 😉

  • 50 Votes
    107 Posts
    3k Views

    @crazycells

    image.png

    image.png

  • 1 Votes
    26 Posts
    1k Views

    Yes ogproxy too is functionnal on dev

  • 15 Votes
    51 Posts
    2k Views

    Oh yes, that’s what’s super cool, I learn something every day. Afterwards I start from so low in JS

  • 19 Votes
    35 Posts
    2k Views

    @DownPW said in Threaded chat support for NodeBB:

    Better like this : add shadow and border-left on self answer

    Of course - you style to your own requirements and taste 🙂 I’ll commit that CSS we discussed yesterday also

  • 50 Votes
    146 Posts
    18k Views

    Updated git for above change

    https://github.com/phenomlab/nodebb-harmony-threading/commit/14a4e277521d83d219065ffb14154fd5f5cfac69

  • 20 Votes
    28 Posts
    785 Views

    thanks Mark.

  • 14 Votes
    14 Posts
    644 Views

    Just circling back here as I’ve been helping @cagatay this morning on his site, and noticed that if you use a mixture of fa-brands and fa-solid then the code supplied above may produce some odd looking results.

    If this is the case, replace the function with this

    $(document).ready(function() { $.getJSON('/api/categories', function(data, status) { $.each(data.categories, function(key, value) { var iconClass = 'fa'; // Default to 'fa' if the icon type is not recognized // Check if the icon is FontAwesome Unicode if (this.icon.startsWith('&#x') || this.icon.startsWith('&#xf')) { iconClass = 'fa'; } else if (this.icon.startsWith('fab')) { iconClass = 'fab'; } var categorylist = $(" \ <li class='dropdown-item tree-root'><span class='category-menu'><i class='" + iconClass + " " + this.icon + "'></i><a style='display: inherit;' class='dropdown-item rounded-1' href='/category/" + this.slug + "'>" + this.name + "</a></span></li> \ <ul class='tree-branch' style='list-style: none;'>" + this.children.map(c => { var childIconClass = 'fa'; // Default to 'fa' for child icons // Check if the child icon is FontAwesome Unicode if (c.icon.startsWith('&#x') || c.icon.startsWith('&#xf')) { childIconClass = 'fas'; } else if (c.icon.startsWith('fab')) { childIconClass = 'fab'; } return `<li class='dropdown-item tree-node'><span class='category-menu-tree-node'><i class='${childIconClass} ${c.icon}'></i><a class='dropdown-item rounded-1' style='display: inherit;' href='/category/${c.slug}'>${c.name}</a></span></li>`; }).join(" ") + "</ul>" ); if ($(window).width() < 767) { $(".bottombar #thecategories").append(categorylist); } else { $(".sidebar-left #thecategories").append(categorylist); } }); }); });

    In fact, if you want to replace it anyway to make your experience “future proof”, you can use this code now 🙂