diff --git a/.idea/.name b/.idea/.name
deleted file mode 100644
index e15412e..0000000
--- a/.idea/.name
+++ /dev/null
@@ -1 +0,0 @@
-fl-query
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index b4d41fa..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/melos_bootstrap.xml b/.idea/runConfigurations/melos_bootstrap.xml
deleted file mode 100644
index d571530..0000000
--- a/.idea/runConfigurations/melos_bootstrap.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/.idea/runConfigurations/melos_clean.xml b/.idea/runConfigurations/melos_clean.xml
deleted file mode 100644
index f45d436..0000000
--- a/.idea/runConfigurations/melos_clean.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/blog/2019-05-28-first-blog-post.md b/docs/blog/2019-05-28-first-blog-post.md
deleted file mode 100644
index 02f3f81..0000000
--- a/docs/blog/2019-05-28-first-blog-post.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-slug: first-blog-post
-title: First Blog Post
-authors:
- name: Gao Wei
- title: Docusaurus Core Team
- url: https://github.com/wgao19
- image_url: https://github.com/wgao19.png
-tags: [hola, docusaurus]
----
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
diff --git a/docs/blog/2019-05-29-long-blog-post.md b/docs/blog/2019-05-29-long-blog-post.md
deleted file mode 100644
index 26ffb1b..0000000
--- a/docs/blog/2019-05-29-long-blog-post.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-slug: long-blog-post
-title: Long Blog Post
-authors: endi
-tags: [hello, docusaurus]
----
-
-This is the summary of a very long blog post,
-
-Use a `` comment to limit blog post size in the list view.
-
-
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
diff --git a/docs/blog/2021-08-01-mdx-blog-post.mdx b/docs/blog/2021-08-01-mdx-blog-post.mdx
deleted file mode 100644
index c04ebe3..0000000
--- a/docs/blog/2021-08-01-mdx-blog-post.mdx
+++ /dev/null
@@ -1,20 +0,0 @@
----
-slug: mdx-blog-post
-title: MDX Blog Post
-authors: [slorber]
-tags: [docusaurus]
----
-
-Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/).
-
-:::tip
-
-Use the power of React to create interactive blog posts.
-
-```js
-
-```
-
-
-
-:::
diff --git a/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg b/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg
deleted file mode 100644
index 11bda09..0000000
Binary files a/docs/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg and /dev/null differ
diff --git a/docs/blog/2021-08-26-welcome/index.md b/docs/blog/2021-08-26-welcome/index.md
deleted file mode 100644
index 9455168..0000000
--- a/docs/blog/2021-08-26-welcome/index.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-slug: welcome
-title: Welcome
-authors: [slorber, yangshun]
-tags: [facebook, hello, docusaurus]
----
-
-[Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog).
-
-Simply add Markdown files (or folders) to the `blog` directory.
-
-Regular blog authors can be added to `authors.yml`.
-
-The blog post date can be extracted from filenames, such as:
-
-- `2019-05-30-welcome.md`
-- `2019-05-30-welcome/index.md`
-
-A blog post folder can be convenient to co-locate blog post images:
-
-
-
-The blog supports tags as well!
-
-**And if you don't want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config.
diff --git a/docs/blog/2022-07-18-fl-query-for-flutter.md b/docs/blog/2022-07-18-fl-query-for-flutter.md
new file mode 100644
index 0000000..df709a3
--- /dev/null
+++ b/docs/blog/2022-07-18-fl-query-for-flutter.md
@@ -0,0 +1,456 @@
+---
+slug: fl-query-for-flutter
+title: Fl-Query⚡ for Flutter
+authors: krtirtho
+tags: [flutter, fl-query]
+---
+
+### Managing async data & mutations in Flutter is like a breeze now🌬️
+
+
+
+If you’re familiar with [Flutter](http://flutter.dev), you’re definitely familiar with `FutureBuilder`. After all this is the only way you can fetch data in Flutter with proper state, or is it? But you might’ve noticed every time the Widget gets rebuild the Future is run along too unless you declare your `Future` in `initState`
+
+But even if you declare your future in `initState` to avoid reruns across rebuilds it will still rerun when the Widget gets disposed & mounted again. So what’s the solution? Ans: `FutureProvider` from [riverpod](http://riverpod.dev) or [provider](https://pub.dev/packages/provider)
+
+Hold on a sec, but it’s not another riverpod/provider article? No, it's not.
+
+Yeah, to cache your future results or server response in you can use `FutureProvider`. It can store & distribute the result all across the application without multiple reruns of the same operation. But what happens when the Data becomes expired or stale? What if your app won’t need that data after some time but the data still wasting RAM?
+
+This is where **Fl-Query** comes to play. It’s an *Async Data + Mutation Manager for Flutter that caches, fetches, automatically refetches stale data.* Similar to [Tanstack Query](http://tanstack.com/query) in the World of web development, but only the concept is implemented & The API is very similar to what Flutter Developers are used to & so it makes everyone feel like home
+
+Enough talk let’s jump to the big part.
+
+## What does it offer?
+
+- Async data caching & invalidation
+- Smart & highly configurable refetch mechanism that smartly updates stale/expired data in the background when needed
+- Declarative way to define asynchronous operations
+- Garbage Collects Query & Mutation. That means unused queries sitting in the Cache for long time gets automatically removed
+- Code & **data** reusability because of persisted data & Query/Mutation **Job** API
+- Optimistic updates
+- Lazy Loading Queries. Run you defined asynchronous task or operation when needed
+- Zero Configuration out of the box Global Store that no one ever have to touch
+- Supports both Vanilla Flutter & [Flutter Hooks](https://pub.dev/packages/flutter_hooks)
+
+## Let’s see some Code
+
+```dart
+// A QueryJob is where the Logic of how the data should be
+// fetched can defined. The task callback is a PURE Function
+// & have access to external resources through the second
+// parameter where the first parameter is the queryKey
+final successJob = QueryJob(
+ queryKey: "query-example",
+ task: (queryKey, externalData) => Future.delayed(
+ const Duration(seconds: 2),
+ () =>
+ "The work successfully executed. Data: key=($queryKey) value=${
+ Random.secure().nextInt(100)
+ }",
+ ),
+);
+
+class MyApp extends StatelessWidget {
+ const MyApp({Key? key}) : super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ // QueryBowlScope creates a Bowl (metaphor for Collection/Store)
+ // for all the Queries & Mutations
+ return QueryBowlScope(
+ child: MaterialApp(
+ title: 'Fl-Query Quick Start',
+ theme: ThemeData(
+ useMaterial3: true,
+ primarySwatch: Colors.blue,
+ ),
+ home: const MyHomePage(),
+ ),
+ );
+ }
+}
+
+class BasicExample extends StatelessWidget {
+ const BasicExample({Key? key}) : super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ return Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ "# Basic Query Example",
+ style: Theme.of(context).textTheme.headline5,
+ ),
+ // QueryBuilder Widget provides the expected query
+ // instances through the builder callback based on
+ // the passed job & externalData argument
+ QueryBuilder(
+ job: successJob,
+ externalData: null,
+ builder: (context, query) {
+ if (!query.hasData || query.isLoading || query.isRefetching) {
+ return const CircularProgressIndicator();
+ }
+ return Row(
+ children: [
+ Text(query.data!),
+ ElevatedButton(
+ child: const Text("Refetch"),
+ onPressed: () async {
+ await query.refetch();
+ },
+ ), // Text
+ ],
+ ); // Row
+ },
+ ), // QueryBuilder
+ ],
+ );
+ }
+}
+```
+
+Here’s three key important part in the code
+
+- [`QueryBowlScope`](https://fl-query.vercel.app/docs/basics/QueryBowlScope): It's the store where all queries & mutations are stored and distributed throughout the application
+- [`QueryJob`](https://fl-query.vercel.app/docs/basics/QueryJob): This what one can use to declare and define the asynchronous operations that retrieves data from server or any other place
+- [`QueryBuilder`](https://fl-query.vercel.app/docs/basics/Queries#querybuilder): It creates appropriate `Query` by using the provided `job` & provides the `Query` in the builder method. It is the way the data & the UI connects
+
+`QueryBowlScope` & `QueryJob` has many properties that can be configured & changed in a way that best suits your application. Most of their properties are some. But properties defined in `QueryBowlScope` are global configuration where `QueryJob` is specific to that very `Query`
+
+## Query External Data
+
+One thing you might’ve notice or have been thinking that the task function is separated from the Widget so how would you use other services, classes, methods or data in it. Simply, how will give inputs to a Query Task or the asynchronous operation? This is where the second parameter of `QueryJob`’s task callback comes to play. You can use the `QueryBuilder`’s `externalData` named argument to pass data to the task callback. You can literally use anything as externalData. Just pass the Type as Type Parameter to `QueryJob` & `QueryBuilder`
+
+QueryJob with externalData example:
+
+```dart
+// This job requires a pre-configured HTTP Client from the http package
+// as externalData
+// The first Type Parameter is the Type of returned Data & 2nd one is the Type
+// of externalData
+final anotherJob = QueryJob(
+ queryKey: "another-unique-key",
+ task: (queryKey, httpClient){
+ return httpClient
+ .get("https://jsonplaceholder.typicode.com/todos/1")
+ .then((response) => response.body);
+ }
+);
+```
+
+Now let’s use this job inside a Widget
+
+```dart
+Widget build(BuildContext context) {
+ // getting the instance of Client provided by the [provider] package
+ final client = Provider.of(context);
+
+ return QueryBuilder(
+ job: anotherJob,
+ // passing the client as externalData
+ externalData: client,
+ builder: (context, query) {
+ if (!query.hasData || query.isLoading) {
+ return const CircularProgressIndicator();
+ }
+ // remember to always show a fallback widget/screen for errors too.
+ // It keeps the user aware of status of the application their using
+ // & saves their time
+ else if(query.hasError && query.isError){
+ return Text(
+ "My disappointment is immeasurable & my day is ruined for this stupid error: $error",
+ );
+ }
+ return Row(
+ children: [
+ // accessing the returned data & showing it
+ Text(query.data["title"]),
+ ElevatedButton(
+ child: const Text("Refetch"),
+ onPressed: () async {
+ await query.refetch();
+ },
+ ),
+ ],
+ );
+ },
+ );
+ }
+```
+
+That’s it. It is that easy to provide `externalData` to a Query task
+
+> By default, when `externalData` changes the Query is not refetched. But you can change this behavior if you want the query to refetch everytime `externalData` changes. Just set `refetchOnExternalDataChange` to true in `QueryJob` for that specific Query or in `QueryBowlScope` for all Queries
+>
+
+## Query Refetch & Stale Time
+
+Every query is updated when needed. But you can trigger a refetch for a Query or multiple queries manually. This can be useful after a mutation or the application data has changed for sure. The `Query.refetch` allows to refetch a single query where `QueryBowl.of(context).refetchQueries` allows refetching multiple queries at the same time
+
+Here’s an example of single query refetch:
+
+```dart
+ElevatedButton(
+ onPressed: () async {
+ await query.refetch();
+ }
+ child: Text("Refetch")
+);
+```
+
+Now for refetching multiple queries:
+
+```dart
+TextField(
+ controller: controller,
+ onSubmitted: (value){
+ QueryBowl.of(context).refetchQueries(
+ [exampleJob1.queryKey, exampleJob2.queryKey]
+ );
+ }
+);
+```
+
+> The `QueryBowl.of` method gives access to many methods used internally in Fl-Query. Its just an imperative way to do some things when it's necessary. It provides access to many useful methods & properties e.g. `refetchQueries`, `invalidateQueries`, `resetQueries`, `isFetching` etc
+>
+
+Stale Time means the amount of time when after a Query or multiple Query’s data should be considered as outdated
+
+By default, Queries become stale as soon as fetch/refetch completes. But this can be configured using the `staleTime` property of `QueryBowlScope` for global configuration or per Query basis using the `QueryJob`'s property
+
+```dart
+final job = QueryJob(
+ queryKey: "another-unique-key",
+ // now the data of the query will become stale after 30 seconds when the
+ // fetch/refetch executes
+ staleTime: Duration(seconds: 30),
+ task: (queryKey, httpClient){
+ return httpClient
+ .get("https://jsonplaceholder.typicode.com/todos/1")
+ .then((response) => response.body);
+ }
+);
+```
+
+## Query status
+
+A Query can be in following statuses
+
+- `isSuccess`: When the task function returned data successfully
+- `isError`: When the task function returned an error
+- `isLoading`: When the task function is running
+- `isRefetching`: When new data is being fetched or simply the `refetch` method is executing
+- `isIdle`: When there's no data & `Query`'s task has not been yet run
+
+These are Query Progress Status there’s another type of status of Query too. They’re called Data availability status. Following are:
+
+- `hasData`: When query contains data no matters what's happening Basically, `query.data != null`
+- `hasError`: When the query contains error. Basically, `query.error != null`
+
+> Remember, don’t use `isLoading` only for Loading Indicators as even if the Query `isSucessful` the `data` can still be null. So use `!query.hasData` || `query.isLoading` to ensure there’s no null exceptions
+>
+
+That is all about queries. It has so much more useful functionalities & features that it can’t be covered in a single article. Please visit the [docs](https://fl-query.vercel.app/) for more info ([https://fl-query.vercel.app](https://fl-query.vercel.app/))
+
+## Mutations
+
+Queries are used for retrieving Data or for GET requests where Mutation are, Unlike queries, typically used to create/update/delete data or perform server side effects
+
+Basically, a mutation is a type of asynchronous operation that modifies already available data or adds data in a store or remote server
+
+Just like QueryJob Mutation has `MutationJob` that can be used to define the mutation operation or configuring different stuff
+
+Here’s a MutationJob example:
+
+```dart
+final basicMutationJob = MutationJob