<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.goalstriving.org/index.php?action=history&amp;feed=atom&amp;title=Flutter_Dart</id>
	<title>Flutter Dart - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.goalstriving.org/index.php?action=history&amp;feed=atom&amp;title=Flutter_Dart"/>
	<link rel="alternate" type="text/html" href="https://wiki.goalstriving.org/index.php?title=Flutter_Dart&amp;action=history"/>
	<updated>2026-07-29T03:43:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.goalstriving.org/index.php?title=Flutter_Dart&amp;diff=110&amp;oldid=prev</id>
		<title>Mshell at 19:42, 14 July 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.goalstriving.org/index.php?title=Flutter_Dart&amp;diff=110&amp;oldid=prev"/>
		<updated>2026-07-14T19:42:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 19:42, 14 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Yes—&#039;&#039;&#039;Flutter/Dart could be useful later for the iPhone and Android apps&#039;&#039;&#039;, but I would not use Flutter as the primary technology for customizing the MediaWiki web application.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Yes—&#039;&#039;&#039;Flutter/Dart could be useful later for the iPhone and Android apps&#039;&#039;&#039;, but I would not use Flutter as the primary technology for customizing the MediaWiki web application &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;as part of the overall [[Production Architecture]]&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The strongest architecture is:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The strongest architecture is:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Mshell</name></author>
	</entry>
	<entry>
		<id>https://wiki.goalstriving.org/index.php?title=Flutter_Dart&amp;diff=109&amp;oldid=prev</id>
		<title>Mshell: Created page with &quot;Yes—&#039;&#039;&#039;Flutter/Dart could be useful later for the iPhone and Android apps&#039;&#039;&#039;, but I would not use Flutter as the primary technology for customizing the MediaWiki web application.  The strongest architecture is:  &lt;code&gt;MediaWiki remains the core platform and system of record          ↓  MediaWiki skin and extensions provide the web experience          ↓  MediaWiki APIs expose application functionality          ↓  Flutter provides an optional iOS/Android client&lt;/co...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.goalstriving.org/index.php?title=Flutter_Dart&amp;diff=109&amp;oldid=prev"/>
		<updated>2026-07-14T19:41:33Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Yes—&amp;#039;&amp;#039;&amp;#039;Flutter/Dart could be useful later for the iPhone and Android apps&amp;#039;&amp;#039;&amp;#039;, but I would not use Flutter as the primary technology for customizing the MediaWiki web application.  The strongest architecture is:  &amp;lt;code&amp;gt;MediaWiki remains the core platform and system of record          ↓  MediaWiki skin and extensions provide the web experience          ↓  MediaWiki APIs expose application functionality          ↓  Flutter provides an optional iOS/Android client&amp;lt;/co...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Yes—&amp;#039;&amp;#039;&amp;#039;Flutter/Dart could be useful later for the iPhone and Android apps&amp;#039;&amp;#039;&amp;#039;, but I would not use Flutter as the primary technology for customizing the MediaWiki web application.&lt;br /&gt;
&lt;br /&gt;
The strongest architecture is:&lt;br /&gt;
 &amp;lt;code&amp;gt;MediaWiki remains the core platform and system of record&lt;br /&gt;
         ↓&lt;br /&gt;
 MediaWiki skin and extensions provide the web experience&lt;br /&gt;
         ↓&lt;br /&gt;
 MediaWiki APIs expose application functionality&lt;br /&gt;
         ↓&lt;br /&gt;
 Flutter provides an optional iOS/Android client&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== For the web application: stay native to MediaWiki ==&lt;br /&gt;
For the web version, align closely with standard MediaWiki development practices:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PHP&amp;#039;&amp;#039;&amp;#039; for extensions, business logic, hooks, permissions, special pages, and server-side features&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; for interactive browser behavior&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CSS/LESS&amp;#039;&amp;#039;&amp;#039; and a MediaWiki skin for visual customization&lt;br /&gt;
* &amp;lt;code&amp;gt;extension.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;skin.json&amp;lt;/code&amp;gt; for standard extension registration&lt;br /&gt;
&lt;br /&gt;
MediaWiki explicitly supports customization through skins and extensions. Its documentation notes that skins control appearance, while extensions customize how MediaWiki works. Basic skin work can be done largely with CSS, JavaScript, and JSON; PHP becomes useful for more advanced behavior. (MediaWiki)&lt;br /&gt;
&lt;br /&gt;
That approach gives GoalStriving several advantages:&lt;br /&gt;
&lt;br /&gt;
* MediaWiki developers can understand and contribute to it.&lt;br /&gt;
* Your code can potentially be distributed as conventional MediaWiki extensions or skins.&lt;br /&gt;
* You can reuse standard authentication, permissions, page history, templates, categories, notifications, and extension hooks.&lt;br /&gt;
* MediaWiki upgrades will be easier than if you replace the normal interface with an unrelated frontend framework.&lt;br /&gt;
&lt;br /&gt;
I would avoid building the web version itself in Flutter Web. Technically Flutter supports web deployment, but it would make GoalStriving feel less like a native MediaWiki project and could complicate accessibility, search indexing, browser behavior, extension compatibility, and community contribution. Flutter’s cross-platform capability is real, but its strongest role here is as a separate mobile client. (Flutter Docs)&lt;br /&gt;
&lt;br /&gt;
== For mobile: Flutter is a reasonable choice ==&lt;br /&gt;
Once the MediaWiki web application and its data model are stable, Flutter could provide one shared codebase for:&lt;br /&gt;
&lt;br /&gt;
* iPhone&lt;br /&gt;
* Android&lt;br /&gt;
* potentially desktop apps later&lt;br /&gt;
&lt;br /&gt;
Flutter officially supports mobile, web, and desktop deployment from a shared Dart codebase. (Flutter Docs)&lt;br /&gt;
&lt;br /&gt;
A GoalStriving mobile app could offer a more focused experience than the full wiki interface:&lt;br /&gt;
&lt;br /&gt;
* View goals and current priorities&lt;br /&gt;
* Add progress updates&lt;br /&gt;
* Complete daily or weekly check-ins&lt;br /&gt;
* Receive reminders&lt;br /&gt;
* Record journal entries&lt;br /&gt;
* Upload photographs&lt;br /&gt;
* Work offline and synchronize later&lt;br /&gt;
* Display dashboards and progress charts&lt;br /&gt;
* Use mobile notifications and biometric authentication&lt;br /&gt;
&lt;br /&gt;
The app would communicate with MediaWiki rather than replace it.&lt;br /&gt;
&lt;br /&gt;
== MediaWiki should remain the backend ==&lt;br /&gt;
MediaWiki provides both an Action API and a REST API. The Action API currently offers broader functionality, while the REST API provides newer, more structured HTTP endpoints. Extensions can also register their own REST endpoints. (MediaWiki)&lt;br /&gt;
&lt;br /&gt;
For GoalStriving, you may eventually create API endpoints such as:&lt;br /&gt;
 &amp;lt;code&amp;gt;GET  /goalstriving/v1/goals&lt;br /&gt;
 GET  /goalstriving/v1/goals/{id}&lt;br /&gt;
 POST /goalstriving/v1/goals&lt;br /&gt;
 POST /goalstriving/v1/checkins&lt;br /&gt;
 GET  /goalstriving/v1/dashboard&amp;lt;/code&amp;gt;&lt;br /&gt;
Those endpoints could be supplied by a normal MediaWiki PHP extension. The Flutter app would consume them using JSON.&lt;br /&gt;
&lt;br /&gt;
This separation is valuable:&lt;br /&gt;
 &amp;lt;code&amp;gt;MediaWiki extension&lt;br /&gt;
 - Defines goals&lt;br /&gt;
 - Enforces permissions&lt;br /&gt;
 - Stores or retrieves information&lt;br /&gt;
 - Implements workflow rules&lt;br /&gt;
 - Exposes REST endpoints&lt;br /&gt;
 &lt;br /&gt;
 Flutter app&lt;br /&gt;
 - Presents the mobile interface&lt;br /&gt;
 - Handles navigation&lt;br /&gt;
 - Stores temporary offline data&lt;br /&gt;
 - Calls MediaWiki APIs&lt;br /&gt;
 - Uses phone-specific features&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Important design decision: pages versus structured records ==&lt;br /&gt;
Before building the mobile app, determine how GoalStriving data will be represented.&lt;br /&gt;
&lt;br /&gt;
You might store goals as:&lt;br /&gt;
&lt;br /&gt;
# Ordinary wiki pages with templates&lt;br /&gt;
# Semantic MediaWiki properties&lt;br /&gt;
# Cargo records&lt;br /&gt;
# Custom MediaWiki database tables&lt;br /&gt;
# A hybrid of pages and structured records&lt;br /&gt;
&lt;br /&gt;
For community alignment, a hybrid is likely strongest:&lt;br /&gt;
&lt;br /&gt;
* Human-readable wiki pages remain the durable content.&lt;br /&gt;
* Templates, Semantic MediaWiki, or Cargo provide structured fields.&lt;br /&gt;
* A GoalStriving extension provides workflow and API functionality.&lt;br /&gt;
* Flutter consumes the structured representation.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
 &amp;lt;code&amp;gt;Goal page&lt;br /&gt;
 ├── Title&lt;br /&gt;
 ├── Description&lt;br /&gt;
 ├── Owner&lt;br /&gt;
 ├── Status&lt;br /&gt;
 ├── Target date&lt;br /&gt;
 ├── Motivational priority&lt;br /&gt;
 ├── Progress entries&lt;br /&gt;
 └── Related goals&amp;lt;/code&amp;gt;&lt;br /&gt;
The same information could be edited through:&lt;br /&gt;
&lt;br /&gt;
* standard MediaWiki forms,&lt;br /&gt;
* a customized web interface,&lt;br /&gt;
* or the Flutter mobile app.&lt;br /&gt;
&lt;br /&gt;
== How to remain aligned with the MediaWiki community ==&lt;br /&gt;
I would follow several principles.&lt;br /&gt;
&lt;br /&gt;
=== Build standard extensions rather than modifying MediaWiki core ===&lt;br /&gt;
Do not directly edit core MediaWiki PHP files. Put GoalStriving functionality into independently installable extensions and skins. MediaWiki’s supported customization model is explicitly based on extension points, hooks, extensions, skins, gadgets, and APIs. (MediaWiki)&lt;br /&gt;
&lt;br /&gt;
=== Keep the normal wiki usable ===&lt;br /&gt;
The project should still work through a browser without the Flutter app. Mobile users who do not install the app should be able to use a responsive MediaWiki interface.&lt;br /&gt;
&lt;br /&gt;
=== Use open standards and documented APIs ===&lt;br /&gt;
Prefer:&lt;br /&gt;
&lt;br /&gt;
* MediaWiki REST endpoints&lt;br /&gt;
* Action API where necessary&lt;br /&gt;
* OAuth or another supported authentication approach&lt;br /&gt;
* JSON&lt;br /&gt;
* standard MediaWiki page and revision concepts&lt;br /&gt;
&lt;br /&gt;
=== Open-source the MediaWiki components ===&lt;br /&gt;
A clearly separated collection could be appealing to the community:&lt;br /&gt;
 &amp;lt;code&amp;gt;GoalStriving extension&lt;br /&gt;
 GoalStriving skin or skin customization&lt;br /&gt;
 GoalStriving templates&lt;br /&gt;
 GoalStriving Page Forms&lt;br /&gt;
 GoalStriving mobile app&amp;lt;/code&amp;gt;&lt;br /&gt;
Someone might adopt only the extension or templates without using the mobile app.&lt;br /&gt;
&lt;br /&gt;
=== Treat Flutter as a client, not the platform ===&lt;br /&gt;
This distinction will help community acceptance. GoalStriving would remain a MediaWiki application that happens to offer a Flutter mobile client—not a Flutter product that merely uses MediaWiki as an incidental database.&lt;br /&gt;
&lt;br /&gt;
== Recommended development roadmap ==&lt;br /&gt;
&lt;br /&gt;
=== Phase 1: Define the MediaWiki data model ===&lt;br /&gt;
Decide how these concepts are represented:&lt;br /&gt;
&lt;br /&gt;
* goals&lt;br /&gt;
* projects&lt;br /&gt;
* progress updates&lt;br /&gt;
* habits&lt;br /&gt;
* motivational priorities&lt;br /&gt;
* users and groups&lt;br /&gt;
* privacy&lt;br /&gt;
* relationships among goals&lt;br /&gt;
&lt;br /&gt;
=== Phase 2: Build the web experience natively ===&lt;br /&gt;
Use:&lt;br /&gt;
 &amp;lt;code&amp;gt;PHP MediaWiki extension&lt;br /&gt;
 JavaScript&lt;br /&gt;
 CSS/LESS&lt;br /&gt;
 MediaWiki skin or skin customization&lt;br /&gt;
 Page Forms / Semantic MediaWiki / Cargo as appropriate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase 3: Create an API boundary ===&lt;br /&gt;
Do not let the future app depend on scraping HTML pages. Expose stable structured API responses from the GoalStriving extension.&lt;br /&gt;
&lt;br /&gt;
=== Phase 4: Build a small Flutter proof of concept ===&lt;br /&gt;
Start with only:&lt;br /&gt;
&lt;br /&gt;
* login&lt;br /&gt;
* list goals&lt;br /&gt;
* view one goal&lt;br /&gt;
* add progress update&lt;br /&gt;
&lt;br /&gt;
This will expose any weaknesses in the API and data model before you build the full app.&lt;br /&gt;
&lt;br /&gt;
=== Phase 5: Add mobile-specific value ===&lt;br /&gt;
Add features that justify installing an app:&lt;br /&gt;
&lt;br /&gt;
* notifications&lt;br /&gt;
* offline access&lt;br /&gt;
* quick check-ins&lt;br /&gt;
* camera uploads&lt;br /&gt;
* widgets&lt;br /&gt;
* biometric login&lt;br /&gt;
* calendar integration&lt;br /&gt;
&lt;br /&gt;
== My recommendation ==&lt;br /&gt;
Use this technology allocation:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Layer&lt;br /&gt;
!Recommended technology&lt;br /&gt;
|-&lt;br /&gt;
|Core platform&lt;br /&gt;
|MediaWiki&lt;br /&gt;
|-&lt;br /&gt;
|Server-side customization&lt;br /&gt;
|PHP extension&lt;br /&gt;
|-&lt;br /&gt;
|Web UI behavior&lt;br /&gt;
|JavaScript&lt;br /&gt;
|-&lt;br /&gt;
|Web appearance&lt;br /&gt;
|MediaWiki skin, CSS/LESS&lt;br /&gt;
|-&lt;br /&gt;
|Structured data&lt;br /&gt;
|Semantic MediaWiki, Cargo, custom tables, or hybrid&lt;br /&gt;
|-&lt;br /&gt;
|API&lt;br /&gt;
|MediaWiki REST API plus extension-specific endpoints&lt;br /&gt;
|-&lt;br /&gt;
|iOS/Android&lt;br /&gt;
|Flutter/Dart&lt;br /&gt;
|-&lt;br /&gt;
|Authentication&lt;br /&gt;
|MediaWiki-compatible OAuth/session approach&lt;br /&gt;
|}&lt;br /&gt;
Flutter is therefore a good potential fit, but &amp;#039;&amp;#039;&amp;#039;only after the MediaWiki application, data model, and API are stable&amp;#039;&amp;#039;&amp;#039;. Your immediate learning investment should probably remain PHP, MediaWiki extension architecture, JavaScript, and MediaWiki APIs. Dart becomes worthwhile when the mobile client becomes an active development phase.&lt;/div&gt;</summary>
		<author><name>Mshell</name></author>
	</entry>
</feed>