19 votes

Announcing the alpha release of Intergrid

Intergrid is an online outliner and note-taking app. It's inspired by – and in many ways replicates – Indigrid, except it's on the Web. It's free to use, and it's readily available right from the main page.

Why Intergrid?

The main goal of Intergrid is to help you focus on the notes.

There are no settings. You can't pick the font. Theming is not an option. There's only content, and what you want to do with it.

Plus, it looks cool.

Is it feature-complete?

Hell no. It's been in development for three months – which is to say, not very long. It still has ways to go.

Which is why I'm keeping the initial release rather quiet: Tildes and a handful of friends are the only people to know about it so far.

Are there bugs?

Afraid so. There are some I know about, and there are probably some I couldn't even reach.

Why release it, then?

Because it works already. You can add, edit, and save your notes in-browser. As long as you have cookies enabled, it will serve you. (Intergrid doesn't use cookies, and has no tracking to speak of, but the permission for localStorage – the technology used to store and gather data about your notes – is adjacent, as far as browsers are concerned.)

It would be of particular use to people on systems other than Windows. While the current version is focused on desktops, future versions may gain mobile support – all the more likely because, outside from a handful of hardcoded interactions and design considerations, there's nothing preventing mobile users from enjoying the app.

There's also the pragmatic reason: something Jeff Atwood called "Always Be Shipping", all the way back in 2007. You can't get feedback on an app that has no public version. Your programming expertise and design sense will only get you so far. Getting it out there – and going forward with the feedback – is a generous part of the process.

Where are you planning to take it?

The first step would be the fix the bugs. There will be a list of known ones in the comments.

Once those are fixed (or can be postponed without repercussions to being able to use the app), there are features I'm going to implement within the next couple of months. Most of them, at least initially, are going to be put in to keep up with Indigrid's feature set.

  • Views: open, move, and close columns, each hosting a different view on the notes, allowing you to gain perspective or edit multiple ideas simulatenously

  • Bookmarks: store views as separate named bookmarks, allowing you to traverse different mental spaces within the notes

  • Action History and Undo/Redo: record changes to the notes and time-travel between its different states, because sometimes, you want to be able to "go there" and not be weighted down by rock-solid commitment

  • Offline Use: work with your notes even when the Internet is down

(Even though the code for columns is already in the development branch, I was unable to come up with a respectable way of handling it before New Year, which is when I promised to release the app.)

In the long term, I'd like to make sure you could access your notes from any browser on any device. This plan also includes the ability to create and share read-only or editable partial copies of your notes – for example, as presentation or a basis for an online discussion. After finishing with shaping up the current, local-only version, this is where want to take the development. I reckon it would take me somewhere between 6 and 12 months to finish the codebase for this.

Anything else I should know?

Do keep in mind that this is an early release. There may be bugs – perhaps even the kind that will rid you of your notes. If you're uncomfortable about using software this early in development, please don't: your sanity is dearer to me than getting users.

It will, however, get stable over time. If there's ever a breaking change on the horizon – the kind of change that will change an aspect of Intergrid radically – users will be notified about it at least two weeks ahead, so that at least they could backup their notes. I want to ensure the safety of mind for the users of Intergrid, so that they know their notes are in safe hands.

That said, make regular backups anyway. The nodes are encoded/decoded as indented plain text, which means they can be transferred to and from a simple textfile with copy/paste. Any single whitespace character – space, tab etc. – is considered one level of indentation, so it doesn't matter how you indent your plain-text notes: they will be aligned as you'd expect. Intergrid and Indigrid both export tab-indented text.

Can I help?

From the coding and design perspective, I would appreciate open-source involvement. However, at this stage, even though there's a repository awaiting changes, I'm uncomfortable making it public just yet, because licensing is hard and I don't want to get into any sort of legal trouble without at least understanding what I'm dealing with.

Once this and other aspects of open-sourcing the code are dealt with, I'm going to post another update.

If you'd like to support the development financially, you could donate via PayPal.me. The first $5 or so will go to supporting the infrastructure: the monthly hosting payment and 1/12th of the yearly domain name price. (Even though the domain name has been paid for for the next two years, I'd like to be able to host the app reliably. The domain name is directly tied to the data saved – you can't access another website's saved data unless they're on the same main domain – which is why it's important to keep it.)

Check out Intergrid

29 comments

  1. ThatFanficGuy
    Link
    The list of known bugs: (comment under this if you'd found any more) nodes are not shortened to any extent and could, with long-enough text, cover the whole page can't select with Shift+Up/Down or...

    The list of known bugs:

    (comment under this if you'd found any more)

    • nodes are not shortened to any extent and could, with long-enough text, cover the whole page
    • can't select with Shift+Up/Down or with Ctrl+A (can still select multiple nodes with Shift+Click)
    • in edit mode, traversing nodes doesn't correctly place the caret to the spot just above/below where it was in the previous node
    • traversing nodes may cause the column to scroll in the direction of traversal
    • when pasting multi-level text, focus falls on the last top-most node (instead of the last pasted node)
    • backdrop is layered incorrectly, causing clicks over node rectangles to register as node traversal (instead of cancelling editing, like it would for clicks over backdrop)
    • cancelling editing after traversing nodes (because of the incorrectly-layered backdrop) sets current node's text to that of the initially-edited node, overwriting it
    • cutting doesn't reset focus to closest available node (must select again manually via mouse click)
    • can't deselect focused node with Ctrl+Click
    • selected nodes are still considered selected, even if their parent is folded and the nodes are hidden
    • many of the browser hotkeys may be caught and prevented from execution (manual commands are still obeyed)
    • footer menu doesn't collapse on smaller-than-laptop screens; this also prevents the app being usable on mobile devices
    • the app currently uses \r\n linebreaks when copying and pasting notes as plain text, which may cause issues on systems other than Windows
    • returning to the app will focus the last node recorded as a target of an action (create, remove, indent, move etc.), as opposed to the one you'd actually focused on exiting the app
    6 votes
  2. [2]
    asoftbird
    Link
    As someone who's had issues with Indigrid losing my file before, l'd really love some kind of save local function.

    As someone who's had issues with Indigrid losing my file before, l'd really love some kind of save local function.

    5 votes
    1. ThatFanficGuy
      Link Parent
      Export function is on the list of short-term features.

      Export function is on the list of short-term features.

      5 votes
  3. [6]
    ainar-g
    Link
    Looks very nice, visual-design-wise! I'm getting a strong Windows 98 feeling, which is good. A couple of notes: HTML has the special <kbd> tag for keyboard shortcuts. I think you might want to use...

    Looks very nice, visual-design-wise! I'm getting a strong Windows 98 feeling, which is good. A couple of notes:

    1. HTML has the special <kbd> tag for keyboard shortcuts. I think you might want to use that.
    2. Instead of writing about the meaning of <kbd>⌘</kbd>1 I would recommend detecting the client's OS and inserting the correct key on the client.
    3. Please, don't touch my scroll. Pretty please!


    1 Apparently Tildes' markdown doesn't support the tag yet. Oh bother. Added <kbd> to the list of tags I would like to have on Gitlab. <influence>Please subscribe, like, and share!</influence>

    5 votes
    1. [5]
      ThatFanficGuy
      Link Parent
      I do use it in the footer. Do you mean using it somewhere else? Using Apple key symbols was an intentional decision. There's a brevity and a ubiquity to it that charms me. That, and there are no...
      1. I do use it in the footer. Do you mean using it somewhere else?
      2. Using Apple key symbols was an intentional decision. There's a brevity and a ubiquity to it that charms me. That, and there are no such concise symbols for regular, non-Mac keys. ( is not a good symbol: not for Ctrl, not for any other key.) Plainly put, Mac wins this. I think learning that symbolism would be of benefit to the user.
      3. I wish I needn't have. I wish there was native scroll propagation of some extent in DOM, so I wouldn't have to re-implement this very basic thing in JS. There's an expectation, because of the design of the "original" app, to be able to scroll the target column from anywhere, including from over the footer. Now I have to replicate it – that, and because, frankly, it's a good default to rely on. But – I agree: I wish I didn't have to mess with it.

      If I may ask: what about the scrolling behavior bothers you?

      6 votes
      1. [4]
        ainar-g
        Link Parent
        (Just in case, I am on Firefox 71 on Ubuntu 18.04. I sincerely hope it's not one of those websites that “work at all in Chrome on Windows.”) Huh. I see it now, but weirdly it doesn't render a...

        (Just in case, I am on Firefox 71 on Ubuntu 18.04. I sincerely hope it's not one of those websites that “work best at all in Chrome on Windows.”)

        1. Huh. I see it now, but weirdly it doesn't render a button-like border, like it normally would. I guess come CSS disabled that?
        2. I see. But be prepared, other people will complain :-)
        3. Well, it doesn't work for me. At all. All I see is my scroll-bar going nowhere and a large amount of this in the console:
          21:14:04.299 TypeError: event.path is undefined 61 engine.js:1100:7
              wheel https://intergrid.online/engine.js:1100
          
        4. While we're at it, there is also this CSS warning:
          21:14:01.416 Unknown pseudo-class or pseudo-element ‘has’.  Ruleset ignored due to bad selector. stylesheet.css:305:6
          

        5 votes
        1. [3]
          ThatFanficGuy
          Link Parent
          I did do most of the testing in a Chromium fork I'm using, I admit. Turned out, event.path is a Google-only Event property, and some browsers (cough Microsoft cough) don't even support the regular...

          I did do most of the testing in a Chromium fork I'm using, I admit. Turned out, event.path is a Google-only Event property, and some browsers (cough Microsoft cough) don't even support the regular .composedPath(). Guess I'm gonna have to do some proper testing now that the app is no longer a fun side project.

          Huh. I see it now, but weirdly it doesn't render a button-like border, like it normally would. I guess come CSS disabled that?

          The only things CSS changes about kbd is giving it font-family and color. It had no formatting of its own, aside from having the default font be monospace.

          I'm thinking it's the other sites that add the appropriate button-like formatting to kbd. It's a cool thing to have inlined in text.

          Well, it doesn't work for me. At all. All I see is my scroll-bar going nowhere and a large amount of this in the console:

          Thanks for the heads-up. I was able to replicate that, and though it didn't have an effect on the workflow, it's not the expected behavior. I'll get to it during bug-fixing.

          While we're at it, there is also this CSS warning:

          It's kinda by design.

          CSS has been promised the :has() selector (which is meant to target the parent element if it has children or siblings passed to the function) for years now. I want to support it natively, which is why I'm including it as a separate rule (that ends up not being parsed because no publicly-released browser supports it yet).

          Both the stylesheet and the engine seek to use :has() before falling back to the JS-only method.

          3 votes
          1. [2]
            ainar-g
            (edited )
            Link Parent
            Re. <kbd>. Whoops! You are correct. I was under the impression that it was made in the built-in browser CSS, but I was wrong. Sorry about the confusion. Re. :has. There is actually a @supports...

            Re. <kbd>. Whoops! You are correct. I was under the impression that it was made in the built-in browser CSS, but I was wrong. Sorry about the confusion.


            Re. :has. There is actually a @supports selector() CSS media query to remove the warning:

            @supports selector(:has) {
              /* Use selector :has here.  */
            }
            

            (Note, there should be no space between selector and the left round bracket.)

            There is only one problem though… It's that the @supports selector() syntax is only supported by Firefox. *Sad trombone* It's shit like that, that made be switch from full-stack to backend-only.


            Either way, for an alpha it looks pretty good. Best wishes to the project!

            4 votes
            1. ThatFanficGuy
              Link Parent
              Thanks for the heads-up on @supports selector. I'd consider using it should the syntax gain more traction. Also, researching the topic made me realize I was wrong about CSS.supports(), as well. I...

              Thanks for the heads-up on @supports selector. I'd consider using it should the syntax gain more traction.

              Also, researching the topic made me realize I was wrong about CSS.supports(), as well. I thought it indicated whether selectors, among other things, are supported. In fact, it only checks for properties (display: grid and such), which... is of no use to me, it turns out. So, thanks for auxiliary effect.

              4 votes
  4. [11]
    Bauke
    Link
    I don't know what happened but I opened it for the first time and everything worked, the "Root" text was there. And now I opened it again and it's empty, and there's an error in the console:...

    I don't know what happened but I opened it for the first time and everything worked, the "Root" text was there. And now I opened it again and it's empty, and there's an error in the console:

    TypeError: node.id is undefined (engine.js:456:19)
    

    And if I try to do anything I'm getting:

    TypeError: Grid.current.node is null (engine.js:307:22)
    
    4 votes
    1. [10]
      ThatFanficGuy
      Link Parent
      May I ask what browser you were using when you entered the page? Was there only "Root" the first time, or were there other nodes as well?

      May I ask what browser you were using when you entered the page?

      Was there only "Root" the first time, or were there other nodes as well?

      5 votes
      1. [9]
        Bauke
        Link Parent
        Firefox 71.0 All the other text was there too, didn't seem to have any problems the first time. I just looked at my localStorage and all the text I saw the first time is there, it's just not...

        Firefox 71.0

        All the other text was there too, didn't seem to have any problems the first time.

        I just looked at my localStorage and all the text I saw the first time is there, it's just not showing up.

        4 votes
        1. [8]
          ThatFanficGuy
          Link Parent
          Let's try something. clear the cache for the page (there's an option in Chrome to do "Empty Cache and Hard Reload"; I can't seem to find it in Firefox, but it must be there, perhaps under a...

          Let's try something.

          1. clear the cache for the page (there's an option in Chrome to do "Empty Cache and Hard Reload"; I can't seem to find it in Firefox, but it must be there, perhaps under a different name)
          2. in console, enter Debug.clear = true
          3. reload the page

          Let me know what you see.

          3 votes
          1. [7]
            Bauke
            Link Parent
            That worked, it's back now. I think what happened is that I pressed Enter to create a new line but didn't enter any text. Then refreshed/closed the page and came back, and it broke.

            That worked, it's back now.

            I think what happened is that I pressed Enter to create a new line but didn't enter any text. Then refreshed/closed the page and came back, and it broke.

            2 votes
            1. [5]
              ThatFanficGuy
              Link Parent
              That shouldn't break the app: I specifically had a guard put up against this sort of empty-string fuckery. Could you do the same thing again and, if the error persists, could you send me the raw...

              I think what happened is that I pressed Enter to create a new line but didn't enter any text.

              That shouldn't break the app: I specifically had a guard put up against this sort of empty-string fuckery.

              Could you do the same thing again and, if the error persists, could you send me the raw contents of the localStorage item "image" (as in, the only one that's there)?

              3 votes
              1. [4]
                Bauke
                Link Parent
                Sure, it seems that it doesn't happen when I have the first node selected (the "Root" one) but it does for any other. localStorage image contents...

                Sure, it seems that it doesn't happen when I have the first node selected (the "Root" one) but it does for any other.

                localStorage image contents
                "[{\"id\":\"null\",\"folded\":false,\"current\":false,\"content\":\"Root\",\"children\":[{\"id\":\"0\",\"folded\":false,\"current\":false,\"content\":\"Hello!\",\"children\":[]},{\"id\":\"1\",\"folded\":false,\"current\":false,\"content\":\"This is Intergrid, an online outliner and note-taking app\",\"children\":[]},{\"id\":\"2\",\"folded\":false,\"current\":false,\"content\":\"It's inspired by – and in many ways replicates – Indigrid, the original \\\"-grid\\\" app by Mark Nevarrik\",\"children\":[{\"id\":\"3\",\"folded\":false,\"current\":false,\"content\":\"If you're interested in a desktop outliner of the same format, check out Indigrid:\",\"children\":[]},{\"id\":\"4\",\"folded\":false,\"current\":false,\"content\":\"http://innovationdilation.com\",\"children\":[]},{\"id\":\"5\",\"folded\":false,\"current\":false,\"content\":\"(don't worry: you can easily copy your notes between Indigrid and Intergrid if you change your mind)\",\"children\":[]}]},{\"id\":\"6\",\"folded\":false,\"current\":false,\"content\":\"Intergrid is currently in the alpha state\",\"children\":[{\"folded\":false,\"current\":true,\"content\":\"\",\"children\":[]},{\"id\":\"7\",\"folded\":false,\"current\":false,\"content\":\"There may be bugs, and most of the features are still missing\",\"children\":[]},{\"id\":\"8\",\"folded\":false,\"current\":false,\"content\":\"If you see a bug, please report it to this address:\",\"children\":[]},{\"id\":\"9\",\"folded\":false,\"current\":false,\"content\":\"firebrandcoding@gmail.com\",\"children\":[]}]},{\"id\":\"10\",\"folded\":false,\"current\":false,\"content\":\"Most of the controls are noted in the footer\",\"children\":[{\"id\":\"11\",\"folded\":false,\"current\":false,\"content\":\"If the hotkey says ⌘, it means Control / Ctrl (or Meta, if you're on Mac)\",\"children\":[]},{\"id\":\"12\",\"folded\":false,\"current\":false,\"content\":\"If it says ⇧, you have to hold Shift for it to work\",\"children\":[]}]},{\"id\":\"13\",\"folded\":false,\"current\":false,\"content\":\"Some hotkeys are only available in certain modes – like, editing\",\"children\":[]},{\"id\":\"14\",\"folded\":true,\"current\":false,\"content\":\"You can only see what's under this node if you navigate to it and expand it\",\"children\":[{\"id\":\"15\",\"folded\":false,\"current\":false,\"content\":\"Well done!\",\"children\":[]},{\"id\":\"16\",\"folded\":true,\"current\":false,\"content\":\"You can also fold nodes by pressing on the + / − icon next to them\",\"children\":[{\"id\":\"17\",\"folded\":false,\"current\":false,\"content\":\"The icon only appears if the node has \\\"children\\\"\",\"children\":[]}]}]},{\"id\":\"18\",\"folded\":true,\"current\":false,\"content\":\"Now, feel free to delete everything and start your own notes!\",\"children\":[{\"id\":\"19\",\"folded\":false,\"current\":false,\"content\":\"Don't worry: the root node can't be removed, so long-pressing Del is okay\",\"children\":[]}]}]}]"
                
                3 votes
                1. [3]
                  ThatFanficGuy
                  Link Parent
                  ...yep, there's the little rascal. Let me see if I get this right. You create a new node, don't enter anything, and reload the page without saving or cancelling it – is that correct?

                  ...yep, there's the little rascal.

                  Let me see if I get this right. You create a new node, don't enter anything, and reload the page without saving or cancelling it – is that correct?

                  3 votes
                  1. [2]
                    Bauke
                    Link Parent
                    Yep, that's it.

                    Yep, that's it.

                    3 votes
                    1. ThatFanficGuy
                      Link Parent
                      Thanks. I'll get to it during the bug-fixing.

                      Thanks. I'll get to it during the bug-fixing.

                      2 votes
            2. Whom
              Link Parent
              That's what it is, just replicated it.

              That's what it is, just replicated it.

              3 votes
  5. [4]
    Keegan
    Link
    It's worth mentioning that this site is nigh impossible to use on mobile without an attached physical keyboard. I like it on desktop though.

    It's worth mentioning that this site is nigh impossible to use on mobile without an attached physical keyboard. I like it on desktop though.

    3 votes
    1. [3]
      ThatFanficGuy
      Link Parent
      It's a known bug. :( I'll get to developing mobile workflow after the desktop version is up to the snuff. Do you think it would be okay to work with a shortened footer on mobile? One that only has...

      It's a known bug. :(

      I'll get to developing mobile workflow after the desktop version is up to the snuff.

      Do you think it would be okay to work with a shortened footer on mobile? One that only has symbols or short titles for actions, where you could click on each to invoke it?

      2 votes
      1. [2]
        Keegan
        Link Parent
        I think that would work pretty well actually. Adding that functionality to desktop as well might be worthwhile.

        I think that would work pretty well actually. Adding that functionality to desktop as well might be worthwhile.

        2 votes
        1. ThatFanficGuy
          Link Parent
          Clickable footer buttons is on the short-term list of features, as well. I had it working in the previous iteration of the engine, as a matter of fact. Guess I got too busy with the rest of the...

          Clickable footer buttons is on the short-term list of features, as well.

          I had it working in the previous iteration of the engine, as a matter of fact. Guess I got too busy with the rest of the workflow. Just have to copy the idea.

          2 votes
  6. [2]
    unknown user
    Link
    I've spotted a bug, I think: deleting an item which has subitems makes you go into edit mode, and when you exit (either via esc or ctrl-enter), no item has focus and the only way to get something...

    I've spotted a bug, I think: deleting an item which has subitems makes you go into edit mode, and when you exit (either via esc or ctrl-enter), no item has focus and the only way to get something focused again is to click.

    3 votes
    1. ThatFanficGuy
      Link Parent
      Wasn't able to reproduce the "go into edit mode" part, but yes, the focus is lost. Thanks for the heads-up.

      Wasn't able to reproduce the "go into edit mode" part, but yes, the focus is lost.

      Thanks for the heads-up.

      1 vote
  7. [3]
    emdash
    Link
    Congrats on shipping your product! I've been following your posts for a bit, and it's so true how constant iterative development is the best way to product something meaningful. We may not be...

    Congrats on shipping your product! I've been following your posts for a bit, and it's so true how constant iterative development is the best way to product something meaningful. We may not be building the same thing with the same goals—you're going open source, I'm planning a SaaS app—but it's very motivating to see complex systems architected from constant, meaningful units of work and perseverance.

    Onwards towards beta! Do you have any plans to promote or otherwise monetise Intergrid?

    2 votes
    1. [2]
      ThatFanficGuy
      Link Parent
      "I used to be a perfectionist like you. Then I got pragmatism to the knee." I got tired of not seeing the product out there. If the work I do never shows up in the world, whatever is the point of...

      "I used to be a perfectionist like you. Then I got pragmatism to the knee."

      I got tired of not seeing the product out there. If the work I do never shows up in the world, whatever is the point of it? So I'm shipping it.

      Do you have any plans to promote or otherwise monetise Intergrid?

      Like I said in the post, I'm keeping the release relatively quiet because Intergrid, while mostly usable, is not yet ready for public release.

      Once it's more stable – preferably bugless, but one can dream – I want to start talking about it on platforms like Reddit and ProductHunt. Advertising it right now will only get me the "bad dev" reputation, no matter how many bug warnings I put out, and that stain comes off painfully slowly. Once the app is more spry and lively, it may be worth showing.

      As for monetization, I want to keep the primary functionality of Intergrid – the local note-taking that no one else can access – free. Indigrid does the same, and I respect that on many levels.

      The long-term available-from-anywhere goal requires far more infrastructure: the servers with the databases and the security measures, plus the orders-of-magnitude-higher server bandwidth for the stable exchange of data. Unless the users are incredibly-charitable all the way through the development, I might end up charging a small subscription fee for that side of the app.

      The latter is not yet set in stone.

      1 vote
      1. emdash
        Link Parent
        Yeah, I guess I meant down the line—alpha is still alpha after all! But based on your progress so far honestly it doesn't look like a beta is far off. 750words focuses less on tasks and...

        Yeah, I guess I meant down the line—alpha is still alpha after all! But based on your progress so far honestly it doesn't look like a beta is far off. 750words focuses less on tasks and note-taking, and started kind of similarly to what you've got here, and it wasn't long before the owner was paying the bills with it by charging just $5/month.

        Pretty cool if you ask me! Something to keep open or consider down the track.

        1 vote