It's fast and easy, and you can get in contact with others straight away...

Enter a Display Name
Enter your full name or a display name. Businesses, couples and families are also accepted. e.g.
Model Trains Inc.,
Sam and Janis Allen
Enter a username
Your username must be at least 6 characters in length, contain both letters and numbers, and end in a numbers.
Suggested usernames:
Password strength:
Your password can be up 250 characters in length and can contain letters, numbers, punctuation marks and spaces.
Hint: a secure password is long but easy to remember and not complex, e.g.
Jules Verne is an excellent author
Retype password
Enter the same password again to check for errors.

By signing up you agree to our Terms of Use & Privacy Policy

Drag and zoom to move the image.
Note: Only JPG files are currently accepted.
Address 2
Post Code
Sort posts by: Date
( )
Click for advanced permissions.

Undo Redo Paste Link Attach an image or file
Another small update this time.

Today we added some neat tricks in getting Mirror Island to work with Thoth. The plain text of any post can now be viewed with the "/src" page option. As well as unformatted text, you can also access the HTML version if it contains markdown formatting with the "/htm" page option.

Try it out now with this post using these links:

Additional markdown formatting was also included in the update. Headings underlined with dashes (-) and equal signs(=) are handled, as well as horizontal lines with 3 or more dashes and asterisks (*) on a single line. Strong and emphasised text can be used with underscores(_) as well now.
Lately we have been compiling Thoth for Windows. Thanks to msys2 ( compiling GTK+ apps on Windows have gotten a lot more easier.

At this stage we have been able to compile a version that can run in the build environment, although the goal is to have a complete standalone application. Once we have a working standalone application we will publish it on here, including the source code and build instructions which hopefully, would also apply to compiling any GTK+ application on Windows.
Only a minor bug fix update, although it depends on a table being modified in the database. The fixes allow replies to emails through the instant messager, as well as sending updated posts if an email is listed as one of the recipients.

The website database will need to be updated, which can be done through phpMyAdmin or the MySQL monitor. You will need to sign in with administrative privileges, as well as the name of the website database itself.

With the website database selected, run these SQL commands to add the required columns.

alter table recipients add column emaildisplayname tinytext after recipientaccountid;
alter table recipients add column emailusername tinytext after emaildisplayname;
alter table recipients add column emailserver tinytext after emailusername;

Reading Open Graph Meta Properties

Last night we pushed a small update to improve link sharing on Mirror Island.

When people share links, finding the right information can be made easy if Open Graph tags are available. Some guesswork can be made by using HTML's <title> tag for the link text, and allowing people to choose one of many images found on the page (if we're lucky).

Previously, links added to a blank document used to look like this:
Thankfully the Open Graph protocol ( provides a number of useful <meta> tags allowing easy and a more accurate way of sharing links between websites and networks. In the <head> section of an HTML page we might find these meta tags:
<meta property="og:title" content="World largest steam locomotive is back! Big Boy 4014 hits the main line">
`<meta property="og:url" content="">`
<meta property="og:image" content="">
`<meta property="og:description" content="They said it couldn't be done. It was too heavy, too long, it burned too much fuel, and would cost too much to restore. But they were wrong. Union Pacific, B...">`

There are a number of other meta tags we could use. In our case we need to only use og:title, og:image, og:url and og:description.

Using these Open Graph tags, links generated in new posts now look like this:
Much better.

At this point each Open Graph meta tag is self-explanatory. So now we know what tags to read, the next part is how to read them. Usually, some usable information can be extracted by using regexp to read tags. However, regexp isn't the best solution when dealing with markup tags.

The method we use is to read the DOM (Document Object Model) with PHP's DOMDocument class. It can also handle most errors that would occur if using regexp, such as tags inside comments or javascript code. First, we load the web page as an HTML string. Next, the string is loaded in to a blank domDocument. From here we can navigate and read data from the DOM tree.

The following lines of code can read the Open Graph url, title, image, and description. This is a cut-down version of what we used, in order to focus on DOM features in this article. This code snippet is free to use for whatever purpose you see fit.

/* func_php_cleantext is a custom function used to
   sanitise the input */
$url = func_php_cleantext($_POST['url'], 1024);

/* Load the HTML as a DOM document
$html = file_get_contents($url);
$dom = new domDocument;
$dom->preserveWhiteSpace = false;

/* Fetch data from any Open Graph tags
$og_url = '';
$og_title = '';
$og_image = '';
$og_description = '';
$metatags = $dom->getElementsByTagName('meta');
foreach ($metatags as $meta) {
    $metaproperty = $meta->getAttribute('property');
    $metacontent = $meta->getAttribute('content');

    if ($metaproperty == "og:url") {
        $og_url = $metacontent;
    } else if ($metaproperty == "og:title") {
        $og_title = $metacontent;
    } else if ($metaproperty == "og:image") {
        $og_image = $metacontent;
    } else if ($metaproperty == "og:description") {
        $og_description = $metacontent;

/* Use the Open Graph title if available, otherwise
   fall back to the HTML document's title tag */
$title = '';
if ($og_title) {
    $title = $og_title;
} else {
    $headtitle = $dom->getElementsByTagName('title');
    foreach ($headtitle as $t) {
        if ($t->nodeValue != '')
            $title = $t->nodeValue;

/* Overwrite the provided URL with the Open Graph
   provide one if available. */
if ($og_url) {
    $url = $og_url;

/* From here on, $og_image and $og_description are used
   as-is */
A small change this time. Markdown for inline code can be wrapped in <code> tags by surrounding them with backticks ( ` ). As usual, a few minor bug fixes with small screen support in CSS also were included.

How We Got Line Break To Work Consistently with contentEditable

(Well, In Firefox At Least)

A challenge of getting the markdown parser to work more reliably was getting predictable HTML from the contentEditable node. Depending on what the user entered, contents of a contentEditable (at least in Firefox for these tests) generated <div> elements around <br>s, and a collection of seemingly random combinations of HTML tags.

The other main quirk we encountered is not being able to append new lines unless <br> was the last child node of a contentEditable div.

For this we wrote an event handler to intervene when the Enter key is pressed. It forces the contentEditable to insert <br> tags where needed, instead of Firefox's default behaviour which tries to generate HTML the best it can. This way we can make a contentEditable behave more like a <textarea> and still have rich-text editing features for images, videos, and links.

We have attached the code used which is minimalist and has only been tested in Firefox itself. Other browsers will be tested in later coding sessions. It works as expected although we are constantly searching for other bugs that appear.

Throughout these code snippets, index_editdescription is the node of the <div> being edited, usually accessed through document.getElementById(...).

Firstly, we need to capture the key presses to intervene when Enter is pressed:

index_editdescription.addEventListener('keydown', index_js_editorKeyDownEvent, false);

Next, the following function inserts the required <br> tags; one at the cursor, and another if the last child element isn't a line break. Additionally, the function also prevents new lines being inserted in a blank div although this is oversimplified and doesn't check for white-space characters.

function index_js_editorKeyDownEvent(ev)
    if (ev.keyCode == 13) {
        if (index_editdescription.innerHTML == '') {
            return false;
        if (window.getSelection) {
            var sel = window.getSelection();
            var range = sel.getRangeAt(0);
            var brNode = document.createElement('br');
            range = range.cloneRange();
        } // TODO: Impliment document.getSelection and document.selection.createRange for cross-browser compatibility.

        var lastChildTag = index_editdescription.lastChild.nodeName.toLowerCase();
        if (lastChildTag != 'br') {


Bug Fix Release #1

On getting closer to the 0.1.1 release, we have included a few bug fixes and usability improvements. Changes in this release include:

- FEATURE Posts can now be search by their page ID.
- USABILITY Moved "share menu" item. The popup for sharing links covered other menu items below it.
- USABILITY The search popup resizes correctly on small screens.
- BUGFIX Fixed bug not not showing search results if replying to own post.
- BUGFIX Improved editor with irregular line breaks.

We also updated the current terms describing minimum age requirements of primary account holders, and the data usage of advertisements (when implemented).

An Update On Recent Updates

For the past few weeks (and at this point in time) we have mainly been working on bug fixes rather than adding new features to Mirror Island. Our attention has been put towards building the network-connected text editor and note taker, Thoth.

One of the primary aims for Mirror Island was for it to connect to many different apps, depending on what services would be needed.

Thoth is the first component that will be able to edit and send notes to others either through this website or any email service. Attachments to notes will also be featured, so you can always use more than words to get your ideas across to others.

This project is currently in its alpha status, although it is capable of taking notes and editing text files stored on a computer.

Precompiled binaries including source, as well as news of updates at is available at

Alternatively, you can get the source code via git and read the build instructions at

--Sam and Janis

Small Screen Support and Upcoming Apps

Recently we just updated the code base to allow mobile and tablet devices to view this website more comfortably. Also, a few more changes were made to the code and front-end to make moderation easier to understand and less technical, such as "banned" posts are simply "hidden" when approving (or hiding) replies.
As well as these changes, a text editor and note-taker we have been using internally is going to be released as a mobile and cross-platform app where posts on here can be accessed as notes, but more of than in the future as progress is made on it.
Thanks for visiting!
--Sam and Janis.

Happy New Year! (And Other Status Updates)

For what seems to be a quiet time during these holiday seasons, we have been laying the foundation for easier interoperability with different social networks and non-members. The previous year, 2018, helped establish the direction that Mirror Island will take for this year, including the ability to save and share notes in an upcoming cross-platform app.

Thankfully, we had time over the holidays to implement a few major features that were planned, including:

Instant sharing on major social networks.
From the menu in the top-right of every post is now the option to share it with popular social outlets. The feature to send the post as an email is still there and accessible from the same menu

Reply to any page or post with email.
It is now possible to add a reply to any page or post simply by sending it an email.
You can test it on this post simply by sending an email to:
Attachments aren't handled yet, although that feature is planned for on of the next major releases. In the future, we will work out ways to make this user friendly and to keep "junk mail" from appearing in threads, but at least this part is functional now.

First version of web scraping.
When pasting a link in a blank document, information about that page will be automatically included in the post, as well as the option to display any images that are included in that link. This feature is in its early stage, so its functionality might change depending on well this works out for us.
Numerous other changes included cosmetic updates and fixing bugs affecting performance and usability. We're currently at version 0.1.1 with our current focus on updating the documentation explaining how to install and use Mirror Island, and changing the CSS to allow this website to be usable on multiple devices with responsive design.
Thanks for dropping by!
--Sam and Janis

Technical Support and Computing Consultancy

With over 17 years in IT and multiple fields of computer programming, we are now providing our experience to those who need it, whether they are after IT support or simply another opinion on a topic.

Our experience includes the set up and installation of GNU/Linux desktop and server systems, as well as PHP/MySQL web-based applications, and C, Java, Javascript and HTML5 technologies.

What is consultancy? It varies between different needs whether its for business or personal situations, but essentially it means you ask a question or describe what you would like to do and we describe how it can be done, as well as provide advice and support to make sure that everything goes fine along the way.

As a part of what we do, you can keep track of the progress of support or consultation requests through this page.

If you would like to know more, just send us a quick post below (no need to sign in) or email us at with a few questions and we can go from there.

Sam and Janis.

Version 0.1 Released

Progress Updates (And Ways You Can Help)

EDIT:We have included a zip archive of all files hosted on GitLab for those want to download the complete source code of this website without having to use git.

After a long month of fixing critical bugs, the first public version has been finally completed.

The source code for this release (which is also running this website) can be found on GitLab at:

For this release to be possible, we made the following changes:

- Improvements to the editor. The markdown parser recieved a bit of attention. While only a handful of markdown features made it in, enough formatting tools are available to give a document more meaning.
- Attachments are handled better. Along with editor improvements, if an existing attachment is accidentally deleted it can be undone before the edited post is saved. New attachments however, are immediately deleted when requested.
- Messages you have sent are editable. No matter how far back in time a correction needs to be made, individual messages in a conversation can be edited or deleted.
- Permissions now have presets. Commonly used permission scenarios can now be set with presets. Of course if anybody needs to finely tune a post's permissions, they still can access the advanced permissions dialogue.

Upcoming Features

While core functionality has made it through, this website is in its early stage of development and we still have a lot of work to complete. Essential features making their way in future releases include:

Improved email handling. Filtering of incoming emails with virtual mailboxes, and various methods of navigating large volumes of email. Being able to send and receive attachments via email.

Mobile and small-screen compatibility. Being able to view this web site on multiple devices regardless of screen size is a high-priority task, with responsive design CSS and a javascript-free version in the making.

Websockets for the live updating of posts, statuses and messages.

Semantic web integration. Will allow for a more personalised experienced and advanced content handling. Core of the functionality of a web page changing its behaviour depending on the content being displayed.

Ways You Can Help

There are many ways you can help project Mirror Island. Besides coding, usability testing is a major role in improving and building a better network. Some of the ways you can get involved include:

Sign up and use it. Simply using Mirror Island and giving us feedback can be a huge help. You don't need to provide your real name or an email address to register, and accounts can be easily deleted. It is fast to sign up and start posting here, so go ahead and have fun!

Let us know if something doesn't work. This can be either a bug or a usability issue. Bugs are actual software errors while usability issues aren't actual errors but affect how people can (or can't) use this website. Both are equally important to take care of. To report any bugs, follow the link on the bottom of this page for Report a Bug.

Suggest new features. We really like to hear what others would want to see added. A lot of features are already on our list and we will be writing up a roadmap to let others know what will be implemented in the future. Also, the roadmap will give everyone an estimate of how long a task or new feature would take to complete, and when.

Spread the word. Attracting new users and describing this project to others is another huge way to support this project. We have a very limited advertising budget, so word of mouth is always very helpful!

Start a group. Use this website to organise and promote local groups. This is another area of practical use which can give us feedback for what does work and what needs improvement.

Run a copy of this website yourself. Set up a copy yourself, see how the code works, and let us know what you think! An in-depth analysis of how easy (or challenging) it is to set up a copy of Mirror Island is also valuable. The entire source code can be downloaded from the GitLab link listed above, or with the zip file attached to the bottom of this post.

Thanks for reading!
Sam and Janis.
mirrorisland-0.1.0.zipDownload file (2703743 bytes)

We're Replacing The Blue Colour Scheme For Everybody's Health

Don't mind the red-orange-green additions, we're replacing as much as the blue interface on this website as possible with warmer colours. The following link pretty much explains it all:

Why tech’s favorite color is making us all miserable (by Amber Case, via Fast Company)

The article has been echoed multiple times on the internet, and describes the detrimental effects of too much blue. While the colour itself does have a reputation for feeling "cool" and "polished", it doesn't have the same warm and friendly feel as orange or some greens, depending on the colour scheme being used.

So if at any time it appears that the colour scheme on Mirror Island seems out of place, we're exploring a warmer world. It's for the best.

Thanks for dropping by!

Sam and Janis.

Mirror Island: First Post.

This is web site people can post and share stuff on. Since there are literally thousands or websites that already do this, most people probably wouldn't notice this one.

But we have built it anyway.


Because we needed something different. Really different.

We use Mirror Island to keep in contact with the people we wanted, in the way that we wanted. So far, nothing has really been a proper fit for our own needs. However, if others were going to use this web site we took that in mind as well. We aren't designing this to be a social network; that's web 2.0. Instead we're designing this for the next level, web 3.0, and are building this to have the semantic web in its genes from the start.

Throughout the entire development process, we kept focus on three principles:

- Control: Anything posted can be edited or removed by the person who posted it.
- Speed: We wanted it to be fast both in usability and in performance.
- Practical: Most of all, any features we add to it need to be useful.

With those principles kept in mind, we could then turn our attention on what this website and (eventually) its related network-enabled apps do best.

At its core, Mirror Island lets you share just about anything such as a simple idea or message to the world using posts that allows photos and files to be attached like an email, but publicly visible. We didn't want it to be limited to users on this website and wanted a system that would work whether other people were on it or not. We have found other services claim to "connect people" but only if the people you want to connect with are already on the same service in the first place (or were subsequently invited to sign up.) We wanted a system where people didn't have to be a member to interact with or contact other users on here, but also put the necessary features to prevent users on this site from being unnecessarily spammed either.

In terms of control, we wanted anyone who uses this website to have complete control of whatever they publish or post, including editing and deleting anything put in public or private. It was an idea that we played with where anything can be edited or deleted. Even instant messages sent a long time ago could be modified or removed, and that is one of the biggest advantages of a digital world; nothing is set in stone forever so it shouldn't be treated that way.

The speed of posting and editing were also heavily invested in. From sign-up to first post, and searching through posts, we took the approach where if it took more than a few seconds to do something, change it, and if it can't be changed, then we removed it from the primary toolchain. An example is where fine-grained controls are hidden behind presets; the presets are faster to use and adequate for most cases, but the fine-grained controls are still available for those who don't mind the extra time in setting up a post.

Lastly, it needed to be useful. One example is when we needed a quick and easy way to transfer photos from a mobile phone to somebody else's laptop. The email-style post editor was more of a scratchpad of sorts, but it worked reliably. Every time on every device. At the start it felt like a half-hackish workaround because we didn't install an app that would of made the process more streamlined, but we found the more we used it the quicker it was to transfer files and photos between devices.

We recognise that not everything is perfect on this, but it has worked so far, and that to us is enough of a first step. Additional improvements we are currently working on include:

- The mobile compatibility of this site is rather poor, making use on a mobile phone not as easy as we would like it.
- There aren't any websockets or long polling feature yet, a reload button is on the top of the page but only refreshes sidepanel instead of visible posts. We are currently writing our own. Therefore, instant messages aren't really instant but they can be reloaded when clicking on a contact's name in the sidepanel.
- Mark down formatting is limited to basic lists (like this one,) primary and secondary headings, as well as strong and emphasized text. Some combinations don't like to work, such as a list immediately after a heading.
- The email interface isn't very comprehensive. Individual emails are displayed as separate items in the sidebar, leaving a crowded list of messages to scroll through.

As for bugs? You bet there are! But this project is just the beginning, so we're open to feedback from anybody interested in using this.

Thanks for visiting! You can keep up to date with how this website is progressing on our profile page, Sam and Janis Allen.


Loading messages...
( )
Click for advanced permissions.