In this example you can see it operates by default on the children of the currentTiddler (by tag) however you can provide a filter.
I am trying to build a universal basic solution.
\define first-tiddler(filter:"[tag<currentTiddler>]") {{{ $filter$ +[first[]] }}}
\define last-tiddler(filter:"[tag<currentTiddler>]") {{{ $filter$ +[last[]] }}}
\define next-tiddler(filter:"[tag<currentTiddler>]") {{{ $filter$ +[after[]] }}}
\define prev-tiddler(filter:"[tag<currentTiddler>]") {{{ $filter$ +[before[]] }}}
\define goto-first-button(variable-name label:"open" icon:"$:/core/images/preview-open" class:"""tc-btn-invisible""")
<$wikify name=result text="<<$variable-name$>>">
<$button class="$class$"><$action-navigate $to=<<result>>/><$transclude tiddler="$icon$"/>$label$</$button>
</$wikify>
\end
\define goto-variable-button(variable-name label:"open" icon:"$:/core/images/preview-open" class:"""tc-btn-invisible""")
<$wikify name=result text="<<$variable-name$>>">
<$button class="$class$"><$action-navigate $to=<<result>>/><$transclude tiddler="$icon$"/>$label$</$button>
</$wikify>
\end
<$tiddler tiddler="Features">
currentTiddler=<<currentTiddler>><br>
<hr>
first-tiddler: <<first-tiddler>> <<goto-variable-button first-tiddler>><br>
last-tiddler: <<last-tiddler>> <<goto-variable-button last-tiddler>><br>
<hr>
<$set name=first-tiddler value={{{ [tag[TableOfContents]] +[first[]] }}}>
<$set name=last-tiddler value={{{ [tag[TableOfContents]] +[last[]] }}}>
<$set name=next-tiddler value={{{ [tag[TableOfContents]after<currentTiddler>] }}}>
<$set name=prev-tiddler value={{{ [tag[TableOfContents]before<currentTiddler>] }}}>
tiddler-count=<<tiddler-count>> first-tiddler=<<first-tiddler>> currentTiddler=<<currentTiddler>> last-tiddler=<<last-tiddler>><br>next-tiddler=<<next-tiddler>>, prev-tiddler=<<prev-tiddler>>
<$list filter="[tag[TableOfContents]]">
</$list>
</$set></$set></$set></$set>
<hr>
</$tiddler>
`
Tony